Pandas DataFrame等权股票组合月度美元收益计算问题求解
Python Pandas 投资组合复利收益率计算实现方案
你需要的逐月复利计算逻辑可以直接通过Pandas内置的cumprod()累积乘积方法实现,无需手动编写循环,处理大批量数据时效率更高。
步骤1:示例数据构造(可跳过)
如果需要验证逻辑,可以先运行以下代码构造测试数据集:
import pandas as pd import numpy as np # 构造6个月的测试时间序列 date_rng = pd.date_range(start='2023-01-01', end='2023-06-01', freq='MS') df = pd.DataFrame(date_rng, columns=['date']) # 随机生成5只标的的月度收益率 df['SPY'] = np.random.uniform(-0.1, 0.15, size=(6,)) df['DIS'] = np.random.uniform(-0.12, 0.18, size=(6,)) df['XLK'] = np.random.uniform(-0.08, 0.12, size=(6,)) df['BTC'] = np.random.uniform(-0.2, 0.3, size=(6,)) df['ARKK'] = np.random.uniform(-0.15, 0.2, size=(6,)) # 计算月度收益率均值(你提到已经完成这一步) df['Average'] = df[['SPY', 'DIS', 'XLK', 'BTC', 'ARKK']].mean(axis=1)
步骤2:核心计算代码
仅需一行即可完成Dollar_return列的计算:
df['Dollar_return'] = (df['Average'] + 1).cumprod()
cumprod()方法会自动按行顺序计算累积乘积,刚好匹配规则要求:首行值为1*(1+首行Average),后续每行值为上一行的计算结果乘以(1+当前行Average)。
示例输出参考
基于上述测试数据的输出结果示例如下:
| date | Average | Dollar_return |
|---|---|---|
| 2023-01-01 | 0.032 | 1.032000 |
| 2023-02-01 | 0.051 | 1.084632 |
| 2023-03-01 | -0.020 | 1.062939 |
| 2023-04-01 | 0.087 | 1.155415 |
| 2023-05-01 | 0.120 | 1.294065 |
| 2023-06-01 | -0.045 | 1.235832 |
注意事项
- 计算前请确保DataFrame已经按照时间顺序正序排列,避免因为行顺序错乱导致计算结果错误
- 如果
Average列存在空值,可以先执行df['Average'] = df['Average'].fillna(0)将空收益率替换为0后再计算,避免结果出现空值
内容的提问来源于stack exchange,提问作者spencer johnson
相关产品推荐
相关产品推荐

