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

如何在Pandas中基于多列匹配值高效合并两个DataFrame?

使用Pandas高效实现DataFrame匹配合并

先构造你提供的示例数据,方便直接测试:

import pandas as pd

# 第一个DataFrame
df1 = pd.DataFrame({
    'Column A': ['id1', 'id2', 'id3'],
    'Column B': ['name1', 'name2', 'name3']
})

# 第二个DataFrame
df2 = pd.DataFrame({
    'Column X1': ['name1', 'name6', 'name3'],
    'Column X2': ['name4', 'name2', 'name8'],
    'Column Y': ['company1', 'company2', 'company3']
})

你的需求核心是:让df1的Column B与df2的Column X1/Column X2双向匹配,取对应另一列作为New_Column,同时关联Column Y。用循环效率极低,用Pandas的向量化操作可以高效解决:

步骤1:生成双向匹配映射表

把df2拆成两个方向的匹配关系,再合并成统一的映射表:

# 方向1:以X1为匹配名,X2为对应值
map_from_x1 = df2.rename(columns={'Column X1': 'match_name', 'Column X2': 'New_Column'})[['match_name', 'New_Column', 'Column Y']]
# 方向2:以X2为匹配名,X1为对应值
map_from_x2 = df2.rename(columns={'Column X2': 'match_name', 'Column X1': 'New_Column'})[['match_name', 'New_Column', 'Column Y']]
# 合并两个映射表
mapping_df = pd.concat([map_from_x1, map_from_x2], ignore_index=True)

步骤2:关联原DataFrame得到结果

用merge做左连接,匹配df1的Column B和映射表的match_name,最后清理冗余列:

result = df1.merge(mapping_df, left_on='Column B', right_on='match_name', how='left').drop('match_name', axis=1)

运行后得到的结果完全符合你的目标:

Column AColumn BNew_ColumnColumn Y
id1name1name4company1
id2name2name6company2
id3name3name8company3

这种方法全程用Pandas内置的向量化操作,比循环快几个数量级,数据量越大优势越明显。如果df2存在重复匹配项,可以先通过drop_duplicates(subset='match_name')去重,或者根据需求保留特定条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:50:27