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

Python如何校验DataFrame所有行是否存在于另一DataFrame

错误原因

你原有代码的合并逻辑写反了:以dfActual为左表做左连接,实际是在校验dfActual的行是否存在于dfExpected中,和你需要的「校验dfExpected所有行是否存在于dfActual」的需求完全相反;且代码仅给dfActual逐行打了匹配标记,没有做全局的全匹配判断,因此无法得到正确结果。

正确实现代码

方法1:合并标记全局判断法

通过调整合并方向,逐行标记dfExpected的行是否在dfActual中存在,最终判断是否所有行都匹配成功:

check_result = (
    dfExpected
    .merge(dfActual, how='left', indicator=True)
    .eval('_merge == "both"')
    .all()
)

返回值check_result为布尔类型:dfExpected所有行都在dfActual中存在时返回True,否则返回False。

方法2:差集空值判断法

直接计算「dfExpected存在但dfActual不存在」的行差集,若差集为空则代表全部匹配:

check_result = dfExpected.merge(dfActual, how='left', indicator=True).query('_merge == "left_only"').empty
注意事项
  • 校验前需保证两个DataFrame的列名、对应列的数据类型完全一致,否则会出现类型不匹配导致的判定错误,例如同一列一个存储为字符串格式数字、一个存储为数值格式数字,会被判定为不相等
  • 若两个表列顺序不一致,可先执行dfActual = dfActual[dfExpected.columns]对齐列顺序,避免列顺序干扰匹配结果
  • 无需为原DataFrame新增多余的标记列,上述代码可直接返回最终的全局布尔结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:10:00