如何使用pandas计算排除前序数据集的移动平均值
你要实现的是步长等于窗口大小的不重叠滚动窗口均值,可以用以下两种pandas方法实现:
方法1:groupby整数分组实现(全版本兼容)
该方法无需高版本pandas支持,适配所有场景:
import pandas as pd # 示例数据,替换为你自己的数据集 df = pd.DataFrame({'value': [1, 2, 3, 4, 5, 6]}) window = 2 # 替换为你需要的窗口大小 # 每window个连续数据划分为独立分组,组内计算均值 df['target_ma'] = df.groupby(df.index // window)['value'].transform('mean')
逻辑说明:df.index // window会将连续的window个索引归为同一分组,分组之间完全独立,不会跨组引用前序组的数值。
方法2:rolling指定step参数(pandas 1.3+版本支持)
高版本pandas的rolling方法新增了步长参数,直接设置步长等于窗口大小即可得到不重叠的计算结果:
window = 2 # 结果默认对齐到每个窗口的最后一行位置 df['target_ma'] = df['value'].rolling(window=window, step=window).mean() # 如果需要将均值填充到对应窗口的每一行,补充下方代码即可 df['target_ma'] = df['target_ma'].ffill()
如果需要先按其他维度(比如品类、日期分组)再计算,在groupby参数中补充对应维度列即可。
内容的提问来源于stack exchange,提问作者Teja
相关产品推荐
相关产品推荐

