You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含累积乘积的Excel公式转Python Pandas代码实现求助

解决方案

你使用的Excel公式为季度收益率的滚动累计年化收益率计算,核心逻辑可拆解为:将起始行到当前行的所有季度收益率加1后做累积乘积,再按照年化系数(季度数据对应4/累计期数)做幂运算,最后减1得到年化收益率。

完整Pandas实现代码如下:

import pandas as pd

# 构造样例数据
data = {
    "Effective Date": ["30-09-2014", "31-12-2014", "31-03-2015", "30-06-2015", 
                       "30-09-2015", "31-12-2015", "31-03-2016", "30-06-2016",
                       "30-09-2016", "31-12-2016", "31-03-2017", "30-06-2017"],
    "Balanced YFYS": [0.01382434, 0.03070278, 0.04251546, -0.01200241,
                      -0.00109375, 0.02013989, 0.0072328, 0.02630933,
                      0.02090324, 0.01165302, 0.02086588, 0.01677891]
}
df = pd.DataFrame(data)

# 核心计算逻辑
df['cumprod_growth'] = (df['Balanced YFYS'] + 1).cumprod()
df['period_count'] = range(1, len(df) + 1)
df['Annualised since inception'] = (df['cumprod_growth'] ** (4 / df['period_count']) - 1).apply(lambda x: f"{x:.2%}")

# 可删除中间计算列得到最终结果
df = df.drop(columns=['cumprod_growth', 'period_count'])
print(df)

运行后输出的Annualised since inception列和你提供的样例数值完全匹配。如果你的计算起始位置不是DataFrame第一行,只需调整cumprod()的计算范围即可,比如要从第3行(索引为2)开始计算,将累积乘积的计算代码修改为:

df.loc[2:, 'cumprod_growth'] = (df.loc[2:, 'Balanced YFYS'] + 1).cumprod()

注意计算前需确保Balanced YFYS列为浮点型的小数收益率,不要使用带%符号的字符串格式,避免计算报错。


内容的提问来源于stack exchange,提问作者Pyd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:06:03