跟进此答案:Is there a way to do a weight-average rolling sum over a grouping?
rsum = pd.rolling_apply(g.values,p,lambda x: np.nansum(w*x),min_periods=p)
rolling_apply 现已弃用。您将如何更改它以在当前功能下工作。
最佳答案
从 0.18+ 开始,使用 Series.rolling.apply
。
w = np.array([0.1,0.1,0.2,0.6])
df.groupby('ID').VALUE.apply(
lambda x: x.rolling(window=4).apply(lambda x: np.dot(x, w), raw=False))
0 NaN
1 NaN
2 NaN
3 146.0
4 166.0
5 NaN
6 NaN
7 NaN
8 2.5
9 NaN
10 NaN
11 NaN
12 35.5
13 21.4
14 NaN
15 NaN
16 NaN
17 8.3
18 9.8
19 NaN
Name: VALUE, dtype: float64
raw
参数是 0.23 中的新参数(将其设置为指定传递 Series v/s 数组),因此如果您在旧版本上遇到问题,请将其删除。
关于python - 后续rolling_apply已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50744746/