使用groupby的python滚动累积收益
我有下面的数据框,并希望获得过去2个周期的滚动累积回报,比如说,根据标识符分组的2个周期。对于我的实际情况,我需要更长的时间,但我的问题更多的是groupby:使用groupby的python滚动累积收益,python,pandas,Python,Pandas,我有下面的数据框,并希望获得过去2个周期的滚动累积回报,比如说,根据标识符分组的2个周期。对于我的实际情况,我需要更长的时间,但我的问题更多的是groupby: id return 2012 1 0.5 2012 2 0.2 2013 1 0.1 2013 2 0.3 结果应该如下所示: id return
id return
2012 1 0.5
2012 2 0.2
2013 1 0.1
2013 2 0.3
结果应该如下所示:
id return cumreturn
2012 1 0.5 0.5
2012 2 0.2 0.2
2013 1 0.1 0.65
2013 2 0.3 0.56
重要的是,这一时期正在滚动。到目前为止,我有以下公式:
df["cumreturn"] = df.groupby("id")["return"].fillna(0).pd.rolling_apply(df,5,lambda x: np.prod(1+x)-1)
但是,我得到以下错误:AttributeError:“Series”对象没有属性“pd”。我知道如何获得滚动累积回报。但是,我不知道如何将它与groupby结合起来。让我们试试这个:
df_out = (df.set_index('id', append=True)
.assign(cumreturn=df.groupby('id')['return'].rolling(2,min_periods=1)
.apply(lambda x: np.prod(1+x)-1)
.swaplevel(0,1)).reset_index(1))
输出:
id return cumreturn
2012 1 0.5 0.50
2012 2 0.2 0.20
2013 1 0.1 0.65
2013 2 0.3 0.56
对不起,会议,(:@piRSquared…)我从您的提交中了解到了这一点,这就是我为什么要问的原因。会议愉快!