含累积乘积的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
相关产品推荐
相关产品推荐

