Python中两个pandas DataFrame实现Vlookup匹配操作的问题咨询
实现方法
方案1:melt转长表后合并(推荐,性能更好)
先把宽格式的df2转换为和df1字段匹配的长格式,再通过公共字段合并即可,适合绝大多数场景,尤其是数据量较大的情况:
# 将df2的水果列转为行,生成ref和对应数值列 df2_long = df2.melt(id_vars='id', var_name='ref', value_name='target_val') # 按id和ref两个字段合并,结果直接写入df1 df1 = df1.merge(df2_long, on=['id', 'ref'], how='left')
运行后得到的df1效果如下:
| id | ref | target_val |
|---|---|---|
| a | apple | 1 |
| b | orange | 5 |
| c | banana | 9 |
方案2:逐行取值(适合小数据集)
如果数据量很小,也可以用apply逐行匹配取值,写法更简洁:
df1['target_val'] = df1.apply(lambda row: df2.loc[df2['id'] == row['id'], row['ref']].iloc[0], axis=1)
注意:如果存在id匹配失败、或ref值不在df2列名中的情况,方案1会自动填充NaN,容错性更高;方案2需要保证所有ref和id都能匹配到,否则会触发索引错误。
内容的提问来源于stack exchange,提问作者chicagobeast12
相关产品推荐
相关产品推荐

