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

如何对比两个DataFrame的行值?修复np.where触发的KeyError报错

Pandas 对比两序列触发KeyError问题修复

报错原因

触发KeyError: 'Target'以及后续逻辑错误的原因共两点:

  • 变量引用错误:执行tar = target['Target']后,tar已经是单独的一维Series,本身存储的就是Target列的所有值,不存在tar['Target']的写法——相当于在一维序列里找不存在的列,直接触发键错误。
  • 数据结构不匹配:就算修复上述写法,直接对比也无法得到正确结果:
    • prof是双层索引(日期+品类)的分组聚合结果,每行对应单日期下单品类的销售额
    • tar是默认整数索引的目标值序列,每行对应单条目标记录
      二者索引、聚合粒度完全不对齐,pandas无法直接按行匹配做大小比较。

索引对齐是pandas做序列运算的核心前提,粒度、索引不匹配的运算只会得到空值或错误结果。

正确实现方案

首先需要对齐两个对比序列的粒度和索引,再做判断:
如果你的目标是按日期维度对比当日总销售额是否达标,先把销售额聚合到日粒度再对比,代码如下:

# 按日期汇总总销售额,重置索引保证和target表行顺序、长度对齐
daily_total_amount = prof.groupby(level="date_column").sum().reset_index(drop=True)
# 直接用原target表的Target列做判断,不需要单独提取tar变量
target["Target_hit"] = np.where(target["Target"] <= daily_total_amount, 1, 0)

如果你的目标是按行顺序逐行对比两个序列的值(需提前确认两个表行顺序严格一一对应),先把prof的双层索引重置为默认整数索引再对比,代码如下:

# 重置prof索引,和target的默认整数索引对齐
prof_flat = prof.reset_index(drop=True)
target["Target_hit"] = np.where(target["Target"] <= prof_flat, 1, 0)

内容的提问来源于stack exchange,提问作者Samar Pratap Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:15:44