替代 groupby + cumprod (Python)?

问题描述

DataFrame

我有上面的数据框,其中显示了资产 A、B ...Z 的每月回报 +1。

我需要找到每年的累积产品,这意味着我想找到每年每月回报的产品总和。

我一直在使用:

df.groupby(df.index.year).cumproduct()

但这行不通,因为 cumproduct 不是聚合器。有人可以建议另一种方法吗?是不是用for循环乘法之类的..

谢谢!!

解决方法

为了展示一个简洁的例子,我将源 DataFrame 取为:

             Agric    Food
Date                      
1970-01-01  1.0083  0.9719
1970-02-01  1.0948  1.0596
1970-03-01  0.8672  0.9939
1970-04-01  0.8236  0.8943
1971-01-01  1.0070  0.9019
1971-02-01  1.0748  1.0006
1971-03-01  0.7672  0.8939
1971-04-01  0.7236  0.7943

(仅 2 列,2 年仅 4 个月)。

要计算每一列的累计总和,在每一年内, 你可以运行:

result = df.groupby(df.index.year).cumprod()

请注意,所需的函数名为 cumprod,而不是 cumproduct

结果是:

               Agric      Food
Date                          
1970-01-01  1.008300  0.971900
1970-02-01  1.103887  1.029825
1970-03-01  0.957291  1.023543
1970-04-01  0.788425  0.915355
1971-01-01  1.007000  0.901900
1971-02-01  1.082324  0.902441
1971-03-01  0.830359  0.806692
1971-04-01  0.600848  0.640756

但不清楚你想总结什么。