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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:47:12