python - 替代 groupby + cumprod (Python)?
问题描述
我有上面的数据框,它显示资产 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
但不清楚你想总结什么。