Pandas中基于多列匹配实现两个DataFrame值映射的问题
解决方案
你可以通过两种常用方式实现三列等值匹配映射:
方法1:左连接实现(推荐,性能更高且不会打乱原df1的行顺序)
直接以PC1、PC2、PC3作为联合键执行左连接即可:
df1_new = df1.merge( df2[['PC1', 'PC2', 'PC3', 'K1']], on = ['PC1', 'PC2', 'PC3'], how = 'left' ).rename(columns={'K1': 'K1_mapped'})
方法2:多列组合映射(适配你原有map写法的逻辑)
把三列值打包为元组作为映射的键,构建映射字典后完成匹配:
# 先构建三列联合对应的K1映射字典 map_rule = df2.drop_duplicates(['PC1', 'PC2', 'PC3']).set_index(['PC1', 'PC2', 'PC3'])['K1'].to_dict() # 对df1的每行做匹配 df1['K1_mapped'] = df1.apply(lambda row: map_rule.get((row['PC1'], row['PC2'], row['PC3'])), axis=1)
两种方法均会自动将匹配不到的行赋值为NaN,和你期望的输出结果完全一致。
内容的提问来源于stack exchange,提问作者awi1100
相关产品推荐
相关产品推荐

