数据框与两个不同列中的匹配键合并

Dataframe Merge with match key in two different columns

我想 merge 两个 DataFrame,但是第二个 DataFrame 中的匹配键分散在两个不同的列中。合并两个DF的最佳方式是什么?

import pandas as pd

data1 = {'key': ['abc','efg', 'xyz', 'sdf']}
data2 = {'key1' : ['abc','sss','ggg','ccc'],
         'key2' : ['aaa','efg','xyz', 'sdf'],
         'msg' : ['happy','mad','smile','great']}

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

解决这个问题的最简单方法是融化数据框并合并数据框

data1 = {'key': ['abc','efg', 'xyz', 'sdf']}
data2 = {'key1' : ['abc','sss','ggg','ccc'],
         'key2' : ['aaa','efg','xyz', 'sdf'],
         'msg' : ['happy','mad','smile','great']}
data1 = pd.DataFrame(data1)
data2 = pd.DataFrame(data2).melt(id_vars='msg', value_name='key').drop('variable', axis=1)
df = data1.merge(data2, on='key')

df = 
    key msg
0   abc happy
1   efg mad
2   xyz smile
3   sdf great

如果两个数据帧都具有 df1 的第 1 行对应于 df2 的第 1 行等的关系,那么您可以简单地在索引上合并。

代码:

df = pd.merge(df1, df2, left_index=True, right_index=True)
print(df)

输出:

   key key1 key2    msg
0  abc  abc  aaa  happy
1  efg  sss  efg    mad
2  xyz  ggg  xyz  smile
3  sdf  ccc  sdf  great