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
时按列横向扩展窗口,逐行从左到右累积计算。
三、关键特性总结
- 动态窗口:窗口大小随数据位置递增,适用于累积计算场景。
- NaN 处理:自动跳过空值,但需满足
min_periods
要求。 - 灵活方向:通过
axis
参数支持纵向(默认)或横向计算。