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

求助:Pandas中行求和结果参与运算后生成全NaN数据框

问题原因与解决方案

你的问题出在pandas的运算对齐规则上:

  • 左边的(tickers.pct_change().rolling(20).std())是一个DataFrame,行索引为日期,列是4个ticker代码。
  • 右边的((tickers.pct_change().rolling(20).std()).sum(axis=1))是一个Series,索引为日期(与DataFrame的行索引一致),值是每行4个ticker波动率的总和。

当直接用/做除法时,pandas默认会尝试将Series的索引与DataFrame的列名对齐,但两者完全不匹配(Series索引是日期,DataFrame列是ticker),导致对齐失败,最终生成全NaN的结果。

修复代码

你可以用pandas的div()方法,明确指定按行索引对齐,让每行的每个波动率值除以该行的总和:

start_date = '1990-01-01'
ticker_list = ['SPY', 'QQQ', 'IWM','GLD']
tickers = yf.download(ticker_list, start=start_date)['Close'].dropna()

# 先计算一次滚动波动率,避免重复计算
rolling_vol = tickers.pct_change().rolling(20).std()
ticker_vol_share = rolling_vol.div(rolling_vol.sum(axis=1), axis=0)

另外,把滚动波动率的计算单独提取出来,既提升代码效率,也能避免重复计算可能带来的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:05:54