如何使用Pandas将df1 DataFrame的数值映射到df2 DataFrame?
解决方法:将df1的id映射到df2生成df3
数据准备
先明确示例中的两个DataFrame结构:
df1数据:
| id | name |
|---|---|
| 1001 | john |
| 1002 | amy |
| 1003 | jim |
df2数据:
| name | salary | department |
|---|---|---|
| john | 2000 | A |
| amy | 3000 | B |
| jim | 4000 | C |
| john | 5000 | D |
| jim | 6000 | E |
| amy | 7000 | F |
实现方案
以下是两种高效的实现方式:
方案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:
| name | id | salary | department |
|---|---|---|---|
| john | 1001 | 2000 | A |
| amy | 1002 | 3000 | B |
| jim | 1003 | 4000 | C |
| john | 1001 | 5000 | D |
| jim | 1003 | 6000 | E |
| amy | 1002 | 7000 | F |
内容的提问来源于stack exchange,提问作者user20777609
相关产品推荐
相关产品推荐

