取级数平均值的最佳方式



对于按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.expandingmean:一起使用

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

最新更新