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

如何对比两个不同pandas dataframe的两列并提取df2独有的数据行

解决方案

核心思路是直接匹配「员工+办公地点」的组合,避开索引对齐的问题,以下两种方案都可以实现需求:

方法1:使用merge的indicator参数(推荐)

通过外连接标记数据来源,直接筛选仅存在于df2的记录:

import pandas as pd

# 按两列组合做外连接,新增_merge列标记数据所属的df
merged = df1.merge(df2, on=['Employee', 'Office'], how='outer', indicator=True)
# 筛选仅在df2中存在的组合
result = merged[merged['_merge'] == 'right_only'][['Employee', 'Office']]

输出的result就是你需要的目标数据。

方法2:使用集合差集实现

把两列组合转成元组集合做差集,再转回DataFrame:

import pandas as pd

# 将两个df的<员工,办公地点>组合转为元组集合
df1_pairs = set(df1[['Employee', 'Office']].apply(tuple, axis=1))
df2_pairs = set(df2[['Employee', 'Office']].apply(tuple, axis=1))

# 计算差集并转成DataFrame
diff_pairs = df2_pairs - df1_pairs
result = pd.DataFrame(list(diff_pairs), columns=['Employee', 'Office'])

原代码失效原因

你之前用ne对比是基于索引对齐的,两个df的行数、索引不一致时会出现匹配错误。如果之前用merge没得到预期结果,大概率是没有把Employee和Office两列同时设为连接键,或者选择了错误的连接方式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:06:02