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

多索引DataFrame调用gt方法对比时出现列冗余与结果全False问题求助

问题原因与解决方案

问题1:返回结果包含多余的Adj Close列

这是因为你没有正确筛选出仅针对High列的判断结果,或是操作时保留了原DataFrame多级列结构中Adj Close对应的部分。提取tmp1(Adj Close数据)和tmp2(High数据)后,若直接比较且未对结果列做过滤或重构,就会带上原结构里的Adj Close列。

问题2:所有结果均为False

核心原因是多级列对齐错误:

  • 原代码tmp2.eq(tmp2.shift())是同一列(High)内的行比较,列结构完全对齐,所以能正常返回结果。
  • 改用tmp2.gt(tmp1.shift())后,若tmp1和tmp2仍保留原多级列的Level0(即Adj Close和High作为列的第一层级),比较时会变成High列与Adj Close列跨层级匹配,而非同一公司的High与前一日Adj Close匹配,数值无法正确对齐,最终返回全False。

具体修复代码

假设你的原始DataFrame列是MultiIndex(Level0为Adj Close/High,Level1为公司代码),按以下步骤操作:

  1. 正确提取单级列的Adj Close和High数据(仅保留公司代码作为列):
# 提取Adj Close数据,列仅为公司代码
tmp1 = df['Adj Close']
# 提取High数据,列仅为公司代码
tmp2 = df['High']
  1. 执行比较逻辑,此时会自动按公司代码对齐列:
# 判断当前行High是否大于前一行Adj Close
result = tmp2.gt(tmp1.shift(1))
  1. 若需要保留原MultiIndex结构(比如新增一个Level0标识结果),可以重构结果列:
# 构建新的多级列,Level0为结果标识,Level1为公司代码
result_cols = pd.MultiIndex.from_product([['High > Prev Adj Close'], tmp1.columns])
result = pd.DataFrame(tmp2.gt(tmp1.shift(1)), columns=result_cols)

这样处理后,既不会有多余的Adj Close列,也能正确返回符合条件的True结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:57:52