如何根据另一Pandas DataFrame的匹配值条件替换指定列值
解法
方法1:映射替换(最高效,推荐)
利用col1值唯一的特性,先构造df2中col1到col2的映射关系,直接替换df1的col2值:
import pandas as pd # 构造映射字典并赋值 df1['col2'] = df1['col1'].map(df2.set_index('col1')['col2'])
执行后输出df1即可得到预期结果:
col1 col2 0 1 x 1 2 y 2 3 z
方法2:左连接合并
如果df1除了col1、col2外还有其他需要保留的列,也可以通过左连接实现匹配:
# 基于col1做左连接,用df2的col2覆盖原有值 df1 = df1[['col1']].merge(df2, on='col1', how='left')
注意事项
如果df1中存在df2没有的col1值,上面两种方法都会将对应col2赋值为NaN,如果需要保留df1原有的col2值,可以修改第一种方法的代码:
df1['col2'] = df1['col1'].map(df2.set_index('col1')['col2']).fillna(df1['col2'])
内容的提问来源于stack exchange,提问作者edn
相关产品推荐
相关产品推荐

