【发布时间】:2020-02-22 15:15:20
【问题描述】:
我需要计算 pandas 系列滚动窗口内所有值的乘积,忽略 nan。
我正在使用 pandas.Series.rolling.apply 作为当前方法,但与内置函数相比速度相当慢,我正在处理巨大的数据帧,因此速度是我关心的问题。
作为示范:
import pandas as pd
a = pd.Series(range(100))
%timeit -n100 a.rolling(5).apply(np.nanprod,raw=True)
5.58 ms ± 163 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit -n100 a.rolling(5).mean()
236 µs ± 19 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
所以apply() 与内置的mean 函数相比要慢很多
1 有没有办法加快申请过程
2 或者是否有滚动窗口的内置产品功能(如果可能,忽略 nan)?在文档中找不到它
【问题讨论】:
-
为了降低开销,请尝试将您的 Series 转换为 numpy 数组,然后对其进行操作。
-
你为什么要把
np.nanprod和.mean()比较? -
@jorijnsmit
%timeit -n100 a.rolling(5).apply(np.mean,raw=False)11.3 ms ± 59.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each),这是应用程序放慢速度时发生的事情,而不是意味着。我将np.nanprod与mean进行比较,因为没有内置产品功能,否则我的整个问题将不存在。 -
@J_H 会尝试,虽然 numpy 中的滚动功能不像 pandas 中那么直观
标签: python-3.x pandas rolling-computation