Pandas:如何从另一个DataFrame匹配ID对应的名称?
Pandas:将ID关联表与名称表匹配,生成带名称的结果表
嘿,这就帮你搞定这个Pandas的匹配需求!你手头有两个DataFrame:一个存两组ID的关联关系(df1),另一个存ID对应的名称(df2),想要把名称信息匹配到df1里,生成包含ID和对应名称的结果表对吧?看下面的具体解法:
先还原你的示例数据
首先,我们先把你给出的示例数据用代码还原出来,方便后续验证:
import pandas as pd # 你的df1:ID关联表 df1 = pd.DataFrame({ 'ID1': [0, 1, 3, 1], 'ID2': [2, 3, 2, 2] }) # 你的df2:ID-名称映射表 df2 = pd.DataFrame({ 'ID': [0, 1, 2, 3], 'name': ['John', 'Carl', 'Eva', 'Julia'] })
方法一:用merge分步匹配(直观易懂)
这种方法适合需要清晰跟踪每一步关联过程的场景,分两次把df2的名称匹配到df1的ID1和ID2上:
# 第一步:匹配ID1对应的名称,生成name1列 df_result = df1.merge(df2, left_on='ID1', right_on='ID', how='left') \ .rename(columns={'name': 'name1'}) \ .drop('ID', axis=1) # 第二步:匹配ID2对应的名称,生成name2列 df_result = df_result.merge(df2, left_on='ID2', right_on='ID', how='left') \ .rename(columns={'name': 'name2'}) \ .drop('ID', axis=1) # 可选:调整列顺序,让结果和你期望的格式完全一致 df_result = df_result[['ID1', 'ID2', 'name1', 'name2']]
方法二:用map快速映射(简洁高效)
如果只是简单的ID到名称的一对一映射,用map会更简洁,先把df2转换成ID到名称的字典,再直接映射到df1的列上:
# 先把df2转换成ID: name的字典映射 name_mapping = df2.set_index('ID')['name'].to_dict() # 直接给df1添加name1和name2列 df1['name1'] = df1['ID1'].map(name_mapping) df1['name2'] = df1['ID2'].map(name_mapping)
最终结果
不管用哪种方法,最终得到的结果都和你期望的一致:
ID1 ID2 name1 name2 0 0 2 John Eva 1 1 3 Carl Julia 2 3 2 Julia Eva 3 1 2 Carl Eva
两种方法各有优势:merge适合更复杂的关联场景(比如多条件关联、需要保留更多额外列),而map在这种简单映射场景下更高效简洁,你可以根据自己的实际需求选择~
内容的提问来源于stack exchange,提问作者emax
相关产品推荐
相关产品推荐

