使用groupby的python滚动累积收益

使用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

我有下面的数据框,并希望获得过去2个周期的滚动累积回报,比如说,根据标识符分组的2个周期。对于我的实际情况,我需要更长的时间,但我的问题更多的是groupby:

        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…)我从您的提交中了解到了这一点,这就是我为什么要问的原因。会议愉快!