【Pandas】pandas DataFrame expanding

Pandas2.2 DataFrame

Function application, GroupBy & window

方法描述
DataFrame.apply(func[, axis, raw, …])用于沿 DataFrame 的轴(行或列)应用一个函数
DataFrame.map(func[, na_action])用于对 DataFrame 的每个元素应用一个函数
DataFrame.applymap(func[, na_action])用于对 DataFrame 中的每一个元素应用一个函数
DataFrame.pipe(func, *args, **kwargs)用于实现链式编程风格的方法
DataFrame.agg([func, axis])用于对 DataFrame 的数据进行聚合操作
DataFrame.aggregate([func, axis])用于对 DataFrame 进行聚合操作的方法
DataFrame.transform(func[, axis])用于对 DataFrame 的列或行应用函数
DataFrame.groupby([by, axis, level, …])用于进行分组操作的核心方法
DataFrame.rolling(window[, min_periods, …])用于在 DataFrame 上创建滑动窗口对象
DataFrame.expanding([min_periods, axis, method])用于实现扩展窗口计算

pandas.DataFrame.expanding()

pandas.DataFrame.expanding() 用于实现扩展窗口计算,其窗口范围从数据起始点逐步扩展到当前行/列,适用于累积统计量的动态计算。以下是具体解析及示例:


一、函数语法
DataFrame.expanding(min_periods=1, axis=0, method='single')
  • 参数说明
    • min_periods:窗口内要求的最小非空观测数,低于此数返回NaN(默认值 1)。
    • axis:计算方向,0'index' 表示纵向(默认),1'columns' 表示横向。
    • method:仅在使用 engine='numba' 时有效,'single'(逐列计算)或 'table'(全表计算)。

二、使用示例
示例 1:纵向累积求和(默认参数)
import pandas as pd
import numpy as np

df = pd.DataFrame({"B": [0, 1, 2, np.nan, 4]})
result = df.expanding(min_periods=1).sum()
print(result)

输出

     B
0  0.0
1  1.0
2  3.0
3  3.0  # 跳过 NaN,累积前三项 0+1+2=3
4  7.0  # 0+1+2+4=7(NaN 被忽略)

说明:默认按行方向扩展窗口,min_periods=1 表示至少包含 1 个有效值开始计算。NaN 值自动跳过,不影响已累积的有效值。


示例 2:调整最小观测数(min_periods=2)
result = df.expanding(min_periods=2).sum()
print(result)

输出

     B
0  NaN  # 仅 1 个数据,不满足 min_periods=2
1  1.0  # 0+1=1
2  3.0
3  3.0
4  7.0

说明:首行因有效数据不足 min_periods=2 返回 NaN,后续窗口满足条件后正常计算。


示例 3:横向扩展窗口(axis=1)
df = pd.DataFrame({"A": [1, 2], "B": [3, 4], "C": [5, 6]})
result = df.expanding(axis=1).sum()
print(result)

输出

   A    B     C
1  1  4.0   9.0  # 行1横向累积:1 → 1+3=4 → 1+3+5=9
2  2  6.0  12.0  # 行2横向累积:2 → 2+4=6 → 2+4+6=12

说明axis=1 时按列横向扩展窗口,逐行从左到右累积计算。


三、关键特性总结
  1. 动态窗口:窗口大小随数据位置递增,适用于累积计算场景。
  2. NaN 处理:自动跳过空值,但需满足 min_periods 要求。
  3. 灵活方向:通过 axis 参数支持纵向(默认)或横向计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuweidong0802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值