比方说,我有一个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