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

如何用逐行随机权重DataFrame计算多资产组合日收益率?

问题原因与解决方案

问题根源

你遇到的全NaN结果,核心原因是Pandas的索引对齐机制:

  • wdf.iloc[i]提取的单行权重是一个以A/B/C为索引的Series;
  • pct_returns的行索引是日期,列索引是A/B/C;
  • 直接相乘时,Pandas会优先按行索引对齐,日期与A/B/C完全不匹配,导致所有位置无法对齐,最终返回全NaN。

解决方法

方法1:逐行计算单组合

将权重转为numpy数组跳过索引对齐,或指定按列对齐后求和:

# 方式A:用矩阵乘法(推荐)
weights = wdf.iloc[0].values  # 取第1组权重,转为numpy数组
portfolio_return = pct_returns.dot(weights)  # 计算每日组合收益率

# 方式B:按列相乘后求和
weights = wdf.iloc[0]
portfolio_return = pct_returns.multiply(weights, axis='columns').sum(axis=1)

方法2:批量计算所有100组组合高效无循环

不用逐行循环,直接通过矩阵乘法一次性生成所有组合的收益率:

# pct_returns(T行3列) × wdf转置(3行100列) → T行100列的结果
all_portfolios = pct_returns.dot(wdf.T)
# 为组合命名可选
all_portfolios.columns = [f'Combo_{idx+1}' for idx in range(wdf.shape[0])]

前置检查:确保列名匹配

如果pct_returns和wdf的列名不一致,也会导致对齐失败,先确认列名完全一致:

# 检查列名是否匹配
assert list(pct_returns.columns) == list(wdf.columns), "资产列名不匹配,请调整"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:12:58