首页 > 解决方案 > 替代 groupby + cumprod (Python)?

问题描述

数据框

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

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

我一直在使用:

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

但这行不通,因为 cumproduct 不是聚合器。有人可以建议另一种方法吗?是否使用 for 循环进行乘法或其他..

谢谢!!

标签: pythonpandasnumpyfinancequantitative-finance

解决方案


为了呈现一个简洁的例子,我将源 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

但不清楚你想总结什么。


推荐阅读