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

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)。

示例输出参考

基于上述测试数据的输出结果示例如下:

dateAverageDollar_return
2023-01-010.0321.032000
2023-02-010.0511.084632
2023-03-01-0.0201.062939
2023-04-010.0871.155415
2023-05-010.1201.294065
2023-06-01-0.0451.235832

注意事项

  • 计算前请确保DataFrame已经按照时间顺序正序排列,避免因为行顺序错乱导致计算结果错误
  • 如果Average列存在空值,可以先执行df['Average'] = df['Average'].fillna(0)将空收益率替换为0后再计算,避免结果出现空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:12:01