对于按DateTime索引组织的DataFrame,对其中的列进行连续滚动平均值的最佳方法是什么?
例如:
2021-12-20 09:30:00 6.0
2021-12-20 09:31:00 36.0
2021-12-20 09:32:00 37.0
2021-12-20 09:33:00 41.0
2021-12-20 09:34:00 73.0
我的目标是创建一个新列,其中第一个值是第一行的平均值(6(,第二行是前两行的平均数,依此类推。这是通过Pandas实现的吗?还是我必须迭代整个DataFrame?此外,是否可以在每天9:3:00将此列重置为第一卷?
将DataFrame.expanding
与mean
:一起使用
df['A'].expanding().mean()
以09:30
开始的每个组可以创建帮助者组:
import datetime
g = np.cumsum(df.index.time == datetime.time(9, 30))
df.groupby(g)['A'].expanding().mean()
print (df)
A
2021-12-20 09:30:00 6.0
2021-12-20 09:31:00 36.0
2021-12-20 09:32:00 37.0
2021-12-20 09:33:00 41.0
2021-12-20 09:34:00 73.0
2021-12-21 09:30:00 6.0
2021-12-21 09:31:00 36.0
2021-12-21 09:32:00 37.0
2021-12-21 09:33:00 41.0
2021-12-21 09:34:00 73.0
import datetime
g = np.cumsum(df.index.time == datetime.time(9, 30))
df['rolling mean'] = df['A'].expanding().mean()
df['reset'] = df.groupby(g)['A'].expanding().mean().droplevel(0)
print (df)
A rolling mean reset
2021-12-20 09:30:00 6.0 6.000000 6.000000
2021-12-20 09:31:00 36.0 21.000000 21.000000
2021-12-20 09:32:00 37.0 26.333333 26.333333
2021-12-20 09:33:00 41.0 30.000000 30.000000
2021-12-20 09:34:00 73.0 38.600000 38.600000
2021-12-21 09:30:00 6.0 33.166667 6.000000
2021-12-21 09:31:00 36.0 33.571429 21.000000
2021-12-21 09:32:00 37.0 34.000000 26.333333
2021-12-21 09:33:00 41.0 34.777778 30.000000
2021-12-21 09:34:00 73.0 38.600000 38.600000