问题描述
我有上面的数据框,其中显示了资产 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
但不清楚你想总结什么。