如何基于匹配列从另一DataFrame更新pandas DataFrame指定列值?
解决Pandas中通过匹配另一DataFrame列更新指定列的问题
核心需求
将df1的b1列与df2的b2列匹配,匹配成功时用df2的a2值替换df1的b1值,未匹配的b1值保持不变。
实现步骤
- 构建映射字典:从df2中提取
b2(匹配键)到a2(替换值)的对应关系 - 执行列更新:利用Pandas的
replace方法完成批量替换
完整代码示例
import pandas as pd # 创建示例df1 df1 = pd.DataFrame({ 'idx': [12,13,14,15], 'a1': [4,5,6,7], 'b1': ['x10','x2','x4','x13'], 'c1': [1,3,4,7], 'd1': [2,5,5,9], 'e1': [5,4,6,2] }).set_index('idx') # 创建示例df2 df2 = pd.DataFrame({ 'idx': [1,2,3,4], 'a2': ['x2','x8','x6','x4'], 'b2': ['x1','x2','x4','x7'], 'c2': [2,5,6,6], 'd2': [2,7,9,8], 'e2': [4,8,5,9] }).set_index('idx') # 构建b2到a2的映射字典 b2_to_a2 = df2.set_index('b2')['a2'].to_dict() # 更新df1的b1列 df1['b1'] = df1['b1'].replace(b2_to_a2) # 输出结果 print(df1)
输出结果
a1 b1 c1 d1 e1 idx 12 4 x10 1 2 5 13 5 x8 3 5 4 14 6 x6 4 5 6 15 7 x13 7 9 2
代码解释
- 映射字典构建:
df2.set_index('b2')['a2'].to_dict()将df2的b2列设为索引,提取a2列转为字典,确保每个b2值对应唯一的a2替换值。 - 列更新:
df1['b1'].replace(b2_to_a2)会遍历b1列的每个值,若该值存在于映射字典的键中,则替换为对应的a2值;不存在则保留原始值,完全符合需求。
内容的提问来源于stack exchange,提问作者sam_alloy
相关产品推荐
相关产品推荐

