Pandas如何用另一DataFrame的更新值替换目标DataFrame的对应值
实现方法
这里提供两种简洁的实现方案:
方案1:使用DataFrame.update(首选方案)
update是pandas专门设计用来做数据覆盖更新的接口,完全匹配你的需求:
import pandas as pd # 示例数据构造 df1 = pd.DataFrame({ 'Identity': [3, 4, 5, 6, 7, 8, 9], 'Value': [1, 2, 3, 4, 5, 6, 7], 'Notes': ['a', 'b', 'c', 'd', 'e', 'f', 'g'], }) df2 = pd.DataFrame({ 'Identity': [4, 8], 'Value': [0, 128], }) # 以Identity为公共匹配键设置索引 df1 = df1.set_index('Identity') df2 = df2.set_index('Identity') # 用df2的数值覆盖df1的匹配行,未匹配行不改动 df1.update(df2) # 恢复Identity为普通列 df1 = df1.reset_index()
执行后输出的df1与你需要的结果完全一致:
Identity Value Notes 0 3 1 a 1 4 0 b 2 5 3 c 3 6 4 d 4 7 5 e 5 8 128 f 6 9 7 g
方案2:使用映射赋值(无需修改原表索引)
如果不想改动df1的原有索引,可以用字典映射的方式实现:
# 构造Identity到Value的映射字典 update_map = df2.set_index('Identity')['Value'].to_dict() # 仅替换存在匹配的行的Value值 df1.loc[df1['Identity'].isin(update_map), 'Value'] = df1['Identity'].map(update_map)
内容的提问来源于stack exchange,提问作者DrAl
相关产品推荐
相关产品推荐

