如何让Pandas只计算滚动平均值的最后M点



比方说,我有一个N rows的巨大数据帧df,N可能是10亿行。

如果我做

df.rolling(window=lookback).mean()

我会得到每一行的滚动平均值(或任何滚动操作((当然,开始的行可能都是N,这取决于回头看(

上面没有问题,但它非常非常慢,因为N太大了。

我只需要对last M rows进行滚动以节省时间,并且我只需要最后M行的结果。和M << N

我怎样才能做到这一点?我不想写我自己的滚动函数,在Pandas或Numpy中有没有一种方法可以告诉我,只需对M次进行一些运算,然后停止?

IIUC,您可以切片然后应用滚动:

df = pd.DataFrame({'col': np.arange(1000)})
M = 10
N = 5
out = df.iloc[-M-N+1:].rolling(N).mean().iloc[N-1:]

与之比较:

df.rolling(N).mean().iloc[-M:]

示例输出:

col
990  988.0
991  989.0
992  990.0
993  991.0
994  992.0
995  993.0
996  994.0
997  995.0
998  996.0
999  997.0

最新更新