如何为时间序列DataFrame按天计算Rolling Average并新增列
实现每日滚动累积平均(val_mean)的方法
要实现按日期分组的滚动累积平均(即每天内从当日第一个数据点到当前点的均值),可以用Pandas的分组(groupby)结合扩展窗口(expanding)计算均值的方法,具体步骤如下:
- 确保时间列是datetime类型
如果你的timestamp列还不是datetime格式,先转换:
import pandas as pd df['timestamp'] = pd.to_datetime(df['timestamp'])
- 计算每日滚动累积平均
通过按日期分组,对每组的val列计算扩展窗口均值,直接生成val_mean列:
df['val_mean'] = df.groupby(df['timestamp'].dt.date)['val'].expanding().mean().reset_index(level=0, drop=True)
或者用transform写法,效果完全一致:
df['val_mean'] = df.groupby(df['timestamp'].dt.date)['val'].transform(lambda x: x.expanding().mean())
代码说明
df['timestamp'].dt.date:提取timestamp中的日期部分,用来按天分组expanding().mean():对每个分组内的val列,计算从第一个元素到当前元素的累积均值(也就是你需要的当日滚动平均)reset_index(level=0, drop=True):移除分组产生的日期索引,让结果和原DataFrame的索引匹配
这样处理后,就能得到你示例中的效果:每天的第一个数据点均值等于自身,后续每个点都是当日从开头到当前的平均,第二天重新开始计算。
内容的提问来源于stack exchange,提问作者prof31
相关产品推荐
相关产品推荐

