【发布时间】:2018-05-05 15:13:20
【问题描述】:
我需要使用pandas 计算移动平均线。
ser = pd.Series(np.random.randn(100),
index=pd.date_range('1/1/2000', periods=100, freq='1min'))
ser.rolling(window=20).mean().tail(5)
[Out]
2000-01-01 01:35:00 0.390383
2000-01-01 01:36:00 0.279308
2000-01-01 01:37:00 0.173532
2000-01-01 01:38:00 0.194097
2000-01-01 01:39:00 0.194743
Freq: T, dtype: float64
但是在像这样添加新行之后,
new_row = pd.Series([1.0], index=[pd.to_datetime("2000-01-01 01:40:00")])
ser = ser.append(new_row)
我必须像这样重新计算所有移动数据,
ser.rolling(window=20).mean().tail(5)
[Out]
2000-01-01 01:36:00 0.279308
2000-01-01 01:37:00 0.173532
2000-01-01 01:38:00 0.194097
2000-01-01 01:39:00 0.194743
2000-01-01 01:40:00 0.201918
dtype: float64
我想我只需要计算最后一个 2000-01-01 01:40:00 0.201918 数据,但我找不到只计算最后附加行值的 pandas api。 Pandas rolling().mean() 总是计算所有系列数据
这是一个简单的例子,但在我的实际项目中,范围超过 1,000,000 个系列,每次滚动计算都消耗大量时间
有没有办法在 pandas 中解决这个问题?
【问题讨论】:
-
选择最后 20 个值(例如使用 tail(20))并执行 .mean() ?