79_pandas中的累积和与累积积(cumsum, cumprod, cummax, cummin)

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()方法的处理方式也相同,此处省略示例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值