跟进此答案: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 :(得分:1)
从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数组),因此如果您在旧版本上遇到问题,请将其删除。