如何在Python Pandas DataFrame中生成正确的滞后移动平均?
修正后的3D Average列填充方案
嘿,刚把这个计算逻辑给捋顺了!之前我用下面这个公式尝试填充3D Average列:
df['3D Average'] = df.iloc[::-1].groupby('Hour').Value.rolling(window = 3).mean().shift().sort_index(level = 1).values
本来想着它会取后续3个同小时日期的数值来算平均,但后来才反应过来我的日期是递增排序的,实际需要的是滞后计算——也就是取当前行之前的3个同小时日期的数值来求平均,方向搞反了!
那修正后的正确公式应该是这样:
df['3D Average'] = df.groupby('Hour')['Value'].rolling(window=3).mean().shift().reset_index(level=0, drop=True).values
逻辑拆解:
- 先按
Hour字段分组,确保只对同一小时的数据做计算 rolling(window=3)截取每组内连续的3条数据.mean()计算这3条数据的平均值.shift()把计算结果向后偏移一行,这样当前行的3D Average就对应前3个同小时数据的平均值(不会包含当前行自身的数值)- 最后用
reset_index处理分组产生的多层索引,让结果能完美匹配原DataFrame的行顺序
多亏了社区小伙伴之前的思路启发,终于把这个逻辑给调整对了!
内容的提问来源于stack exchange,提问作者Frank Drin
相关产品推荐
相关产品推荐

