首页 > 解决方案 > 数据框左合并与不同列中的匹配键

问题描述

我必须合并两个DataFrame,下面有一个左连接 - 插图。

问题是匹配键分布在 3 列中。为了使挑战更加复杂,一些行(#4)将有两次相同的匹配键!有人建议我使用Melt,但它只适用于 Right Join。

最好的方法是什么?

将熊猫导入为 pd

data1 = {'key1' : ['abc','aa','aa','sdf'],
         'key2' : ['aa','efg','aa', 'sdf'],
         'key3' : ['aa','aa','xyz', 'aa']
        }

data2 = {'key': ['abc','efg', 'xyz', 'sdf'], 
        'msg' : ['happy','mad','smile','great']}

df1= pd.DataFrame(data1)
df2= pd.DataFrame(data2)

在此处输入图像描述

标签: pythonpandasdataframemerge

解决方案


让我们尝试使用相应的 fromstack重塑键,最后df1使用on和聚合:mapmsgdf2groupbylevel=0first

df1['msg'] = df1.stack().map(df2.set_index('key')['msg']).groupby(level=0).first()

  key1 key2 key3    msg
0  abc   aa   aa  happy
1   aa  efg   aa    mad
2   aa   aa  xyz  smile
3  sdf  sdf   aa  great

推荐阅读