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

Python:基于指定多列对比两个DataFrame,找出彼此缺失行

对比两个结构相似DataFrame,找出彼此缺失的行

问题描述

需要对比两个列结构相似(非完全一致)的DataFrame,基于key_column1和key_column2两列作为匹配键,生成两个新的DataFrame:

  • 一个展示df1中存在但df2中缺失的行
  • 另一个展示df2中存在但df1中缺失的行

解决方案

利用Pandas的merge()方法,通过indicator参数标记行的来源,再根据标记筛选出目标行即可。这种方法无需考虑两DataFrame列结构的差异,缺失列会自动用NaN填充。

完整代码示例

import pandas as pd

# 示例数据1
data1 = {
    'first_column': ['4', '2', '7', '2', '2'],
    'second_column': ['1', '2', '2', '2', '2'],
    'key_column1': ['1', '3', '2', '6', '4'],
    'key_column2': ['1', '2', '2', '1', '1'],
    'fourth_column': ['1', '2', '2', '2', '2'],
    'other': ['1', '2', '3', '2', '2'],
}
df1 = pd.DataFrame(data1)

# 示例数据2
data2 = {
    'first': ['1', '2', '2', '2', '2'],
    'second_column': ['1', '2', '2', '2', '2'],
    'key_column1': ['1', '3', '2', '6', '4'],
    'key_column2': ['1', '5', '2', '2', '2'],
    'fourth_column': ['1', '2', '2', '2', '2'],
    'other2': ['1', '4', '3', '2', '2'],
    'other3': ['6', '8', '1', '4', '2'],
}
df2 = pd.DataFrame(data2)

# 基于两个键列进行全外连接,标记行来源
merged_df = pd.merge(df1, df2, on=['key_column1', 'key_column2'], how='outer', indicator=True)

# 筛选df1独有的行(即df1相对于df2缺失的行)
df1_missing_in_df2 = merged_df[merged_df['_merge'] == 'left_only'].drop('_merge', axis=1)

# 筛选df2独有的行(即df2相对于df1缺失的行)
df2_missing_in_df1 = merged_df[merged_df['_merge'] == 'right_only'].drop('_merge', axis=1)

# 输出结果
print("df1中存在但df2中缺失的行:")
print(df1_missing_in_df2)
print("\ndf2中存在但df1中缺失的行:")
print(df2_missing_in_df1)

代码说明

  1. 全外连接(outer merge):how='outer'会保留两个DataFrame的所有行,匹配不上的行用NaN填充缺失的列。
  2. 标记行来源:indicator=True会新增_merge列,取值为:
    • left_only:仅在df1中存在的行
    • right_only:仅在df2中存在的行
    • both:在两个DataFrame中都存在的行
  3. 筛选目标行:通过_merge列的值筛选出目标行,最后删除_merge列得到干净的结果。

运行结果

  • df1_missing_in_df2会包含df1中key_column1和key_column2组合为(3,2)、(6,1)、(4,1)的行
  • df2_missing_in_df1会包含df2中key_column1和key_column2组合为(3,5)、(6,2)、(4,2)的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:45:36