我需要使用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系列,每个滚动计算耗费大量时间
有没有办法在熊猫中解决这个问题?
答案 0 :(得分:1)
正如Anton vBR在他的评论中写道,在你追加行后,你可以用
计算最后一个值ser.tail(20).mean
花费时间独立于系列长度(在您的示例中为1000000)。
如果经常进行此操作,则可以更有效地计算它。附加行后的平均值为:
但实施起来比较复杂。