79_pandas中的累积和与累积积(cumsum, cumprod, cummax, cummin)
pandas中的累积和与累积积(cumsum, cumprod, cummax, cummin)
要在pandas中生成累积和或累积积,可以使用pandas.DataFrame和Series的cumsum()、cumprod()方法。
pandas.DataFrame.cumsum — pandas 1.1.1 文档
pandas.DataFrame.cumprod — pandas 1.1.1 文档
除了cumsum()和cumprod(),还有用于计算累积最大值和最小值的cummax()和cummin()方法。
pandas.DataFrame.cummax — pandas 1.1.1 文档
pandas.DataFrame.cummin — pandas 1.1.1 文档
本文将介绍以下内容:
- 累积和与累积积:cumsum()、cumprod()
- 基本用法
- 缺失值NaN的处理:参数skipna
- 其他累积操作:cummax()、cummin()
累积和与累积积也可以通过Python的标准库itertools或NumPy的函数和方法生成。使用itertools可以对任意函数进行累积应用。
累积和与累积积:cumsum()、cumprod()
基本用法
以下是一个pandas.DataFrame的示例:
import pandas as pd
print(pd.__version__)
# 1.0.5
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['X', 'Y', 'Z'])
print(df)
# A B
# X 1 4
# Y 2 5
# Z 3 6
默认情况下,无论是cumsum()还是cumprod(),都会按列计算累积和和累积积。如果指定参数axis=1
,则按行计算。
print(df.cumsum())
# A B
# X 1 4
# Y 3 9
# Z 6 15
print(df.cumsum(axis=1))
# A B
# X 1 5
# Y 2 7
# Z 3 9
print(df.cumprod())
# A B
# X 1 4
# Y 2 20
# Z 6 120
print(df.cumprod(axis=1))
# A B
# X 1 4
# Y 2 10
# Z 3 18
对于pandas.Series,也可以使用cumsum()和cumprod()方法:
print(df['B'])
# X 4
# Y 5
# Z 6
# Name: B, dtype: int64
print(type(df['B']))
# <class 'pandas.core.series.Series'>
print(df['B'].cumsum())
# X 4
# Y 9
# Z 15
# Name: B, dtype: int64
print(df['B'].cumprod())
# X 4
# Y 20
# Z 120
# Name: B, dtype: int64
缺失值NaN的处理:参数skipna
以下是一个包含缺失值NaN的pandas.DataFrame示例:
df_nan = pd.DataFrame({'A': [1, 2, 3], 'B': [4, float('nan'), 6]}, index=['X', 'Y', 'Z'])
print(df_nan)
# A B
# X 1 4.0
# Y 2 NaN
# Z 3 6.0
默认情况下,缺失值NaN会被跳过。
print(df_nan.cumsum())
# A B
# X 1 4.0
# Y 3 NaN
# Z 6 10.0
如果将参数skipna=False
,缺失值NaN也会被处理。由于与NaN进行任何算术运算的结果均为NaN,因此NaN之后的所有元素都会变为NaN。
print(float('nan') + 4)
# nan
print(df_nan.cumsum(skipna=False))
# A B
# X 1 4.0
# Y 3 NaN
# Z 6 NaN
对于cumprod()方法,处理方式与cumsum()相同:
print(df_nan.cumprod())
# A B
# X 1 4.0
# Y 2 NaN
# Z 6 24.0
print(df_nan.cumprod(skipna=False))
# A B
# X 1 4.0
# Y 2 NaN
# Z 6 NaN
对于pandas.Series,处理方式相同,此处省略示例。
其他累积操作:cummax()、cummin()
cummax()和cummin()方法分别用于累积计算最大值和最小值。例如,在时间序列数据中,可以用来计算某一时点之前的最大值或最小值。
用法与cumsum()和cumprod()相同。默认情况下按列计算,指定参数axis=1
则按行计算。
df2 = pd.DataFrame({'A': [1, 4, 2], 'B': [6, 3, 5]}, index=['X', 'Y', 'Z'])
print(df2)
# A B
# X 1 6
# Y 4 3
# Z 2 5
print(df2.cummax())
# A B
# X 1 6
# Y 4 6
# Z 4 6
print(df2.cummax(axis=1))
# A B
# X 1 6
# Y 4 4
# Z 2 5
print(df2.cummin())
# A B
# X 1 6
# Y 1 3
# Z 1 3
print(df2.cummin(axis=1))
# A B
# X 1 1
# Y 4 3
# Z 2 2
对于缺失值NaN,处理方式与cumsum()和cumprod()相同,可通过参数skipna
指定。
df2_nan = pd.DataFrame({'A': [1, 4, 2], 'B': [6, float('nan'), 5]}, index=['X', 'Y', 'Z'])
print(df2_nan)
# A B
# X 1 6.0
# Y 4 NaN
# Z 2 5.0
print(df2_nan.cummax())
# A B
# X 1 6.0
# Y 4 NaN
# Z 4 6.0
print(df2_nan.cummax(skipna=False))
# A B
# X 1 6.0
# Y 4 NaN
# Z 4 NaN
print(df2_nan.cummin())
# A B
# X 1 6.0
# Y 1 NaN
# Z 1 5.0
print(df2_nan.cummin(skipna=False))
# A B
# X 1 6.0
# Y 1 NaN
# Z 1 NaN
对于pandas.Series,cummax()和cummin()方法的处理方式也相同,此处省略示例。