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

如何匹配两个DataFrame指定列计算差值并新增结果列

双DataFrame按键匹配计算差值的正确实现

错误原因说明

你之前的写法错误根源在于误用了Python原生的条件循环逻辑处理Pandas的结构化数据匹配需求:

  • 第一个报错ValueError: Can only compare identically-labeled Series objects:直接用==比较两个长度、行标签均不相同的Series列,Pandas不支持这种非对齐的逐元素比较
  • 第二个报错TypeError: unsupported operand type(s) for &: 'str' and 'str':比较运算符==优先级低于位运算符&,未给比较条件加括号时会先执行&运算,同时while循环对布尔Series做判断本身逻辑不成立

正确实现代码

Pandas内置的merge左连接可以完美匹配你的需求,核心逻辑是先按双键对齐两个表,再做差值计算,无匹配的DF2值填充为0即可:

import pandas as pd

# 1. 重命名DF2的Qty字段,避免合并时重名冲突
DF2_adj = DF2.rename(columns={"Qty": "Qty_d2"})

# 2. 以ID、Item为双键左连接,保留DF1的全部7行数据
df_merged = DF1.merge(DF2_adj, on=["ID", "Item"], how="left")

# 3. 计算新列,未匹配到的DF2值填充为0,不改变DF1原有Qty
df_merged["Qty_new"] = df_merged["Qty"] - df_merged["Qty_d2"].fillna(0)

# 4. 提取需要的字段,得到7行3列的最终结果
result = df_merged[["ID", "Item", "Qty_new"]]

结果验证

按照你给出的示例数据,计算后得到的结果如下:

IDItemQty_new
123qwe-5
123asd1
123zxc7
234ewr-7
234sdf3
345xcv0
345qwe-2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:30:03