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

如何使用Pandas将df1 DataFrame的数值映射到df2 DataFrame?

解决方法:将df1的id映射到df2生成df3

数据准备

先明确示例中的两个DataFrame结构:

df1数据:

idname
1001john
1002amy
1003jim

df2数据:

namesalarydepartment
john2000A
amy3000B
jim4000C
john5000D
jim6000E
amy7000F

实现方案

以下是两种高效的实现方式:

方案1:使用merge(推荐)

通过merge按name列进行左连接,保留df2所有行的同时匹配df1中的id,最后调整列顺序:

import pandas as pd

# 构造df1和df2
df1 = pd.DataFrame({'id': [1001, 1002, 1003], 'name': ['john', 'amy', 'jim']})
df2 = pd.DataFrame({
    'name': ['john', 'amy', 'jim', 'john', 'jim', 'amy'],
    'salary': [2000, 3000, 4000, 5000, 6000, 7000],
    'department': ['A', 'B', 'C', 'D', 'E', 'F']
})

# 执行连接并调整列顺序
df3 = df2.merge(df1, on='name', how='left')[['name', 'id', 'salary', 'department']]

方案2:使用map

先将df1转换为name到id的映射字典,再通过map方法将id批量映射到df2:

import pandas as pd

# 构造df1和df2
df1 = pd.DataFrame({'id': [1001, 1002, 1003], 'name': ['john', 'amy', 'jim']})
df2 = pd.DataFrame({
    'name': ['john', 'amy', 'jim', 'john', 'jim', 'amy'],
    'salary': [2000, 3000, 4000, 5000, 6000, 7000],
    'department': ['A', 'B', 'C', 'D', 'E', 'F']
})

# 创建映射字典并完成映射
id_map = df1.set_index('name')['id'].to_dict()
df2['id'] = df2['name'].map(id_map)

# 调整列顺序得到df3
df3 = df2[['name', 'id', 'salary', 'department']]

最终结果

两种方案都会生成符合要求的df3:

nameidsalarydepartment
john10012000A
amy10023000B
jim10034000C
john10015000D
jim10036000E
amy10027000F

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:34:36