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

mwg9r5ms  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(172)

比方说,我有一个巨大的 Dataframe df,其中N rows和N可能是10亿行。

如果我这么做了

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

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

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

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

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

xv8emn3q

xv8emn3q1#

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

相关问题