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

如何对含不一致值的Pandas DataFrame外合并并识别未匹配项?

区分Pandas外连接中的匹配与未匹配数据项

首先给出两个待合并的DataFrame:

import pandas as pd

df1 = pd.DataFrame({'F_Name': ['Alice', 'Bob', 'Charlie', 'Dave'], 
                    'L_Name': ['Smith', 'Sharma', 'Puth', 'Bautista'], 
                    'Age':[15, 24, 32, 40]})
df2 = pd.DataFrame({'F_Name': ['Charlie', 'David', 'Eve', 'Alice'], 
                    'L_Name': ['Puth', 'Bautista', 'Angeline', 'Wonderland'], 
                    'Age':[32,19,21,16]})

常规外连接仅返回合并后的DataFrame,无法直接区分数据来源。要实现区分未匹配项的需求,只需在merge时添加indicator=True参数,Pandas会自动生成_merge列标记每条数据的来源:

# 带来源标记的外连接
df_merge = pd.merge(df1, df2, how='outer', on=['F_Name', 'L_Name', 'Age'], indicator=True)

_merge列的取值说明:

  • both:该数据行在df1和df2中都存在(完全匹配)
  • left_only:仅在df1中存在,df2无匹配项
  • right_only:仅在df2中存在,df1无匹配项

筛选目标数据

根据_merge列可快速筛选出各类数据:

# 仅在df1中存在的数据
only_df1 = df_merge[df_merge['_merge'] == 'left_only']

# 仅在df2中存在的数据
only_df2 = df_merge[df_merge['_merge'] == 'right_only']

# 两边完全匹配的数据
matched_data = df_merge[df_merge['_merge'] == 'both']

优化来源标签(可选)

如果觉得默认标签不够直观,可以将_merge列替换为更易懂的中文标签:

df_merge['数据来源'] = df_merge['_merge'].map({
    'left_only': '仅来自df1',
    'right_only': '仅来自df2',
    'both': '两边匹配'
})
# 删除原_merge列
df_merge = df_merge.drop('_merge', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:05:53