Python 如何在没有列顺序的情况下基于两列合并dataframe?

Python 如何在没有列顺序的情况下基于两列合并dataframe?,python,pandas,dataframe,Python,Pandas,Dataframe,我遇到了以下问题。我想合并多列上的两个数据帧。示例数据帧如下所示:df1: df1: playerA playerB Weight kim lee 1 jackson kim 3 dan lee 4 df2: name1 name2 score dan lee 11 dan kim 23 jackson kim 44 lee

我遇到了以下问题。我想合并多列上的两个数据帧。示例数据帧如下所示:df1:

df1:
playerA   playerB  Weight
kim         lee      1
jackson     kim      3
dan         lee      4


df2:
name1   name2      score
dan         lee      11
dan         kim      23
jackson     kim      44
lee         kim      35
Jackson     lee      26
lee         dan      27

我想基于两列合并这两个数据帧。
df1[['playerA','playerB']],df2[['name1','name2']]

但问题是,我想合并这两个数据帧,而不考虑列的顺序

我试过了

result=pd.merge(df1,df2,on=df1[['playerA','playerB']],df2[['name1','name2']])

但它不起作用

这就是我想要的

df1:
playerA   playerB  Weight score
kim         lee      1    
jackson     kim      3
dan         lee      4

I want to merge df1 and df2 by using two columns from each data frame without considering the order 
(df1[['playerA','playerB']],df2[['name1','name2']])

df2_merge:
name1   name2      score  weight
dan         lee      11    4
kim         lee      23    1
jackson     kim      44    3
lee         kim      35    1
kim        jacson     26   3
lee         dan      27    4

And then I want to delete the row which has the same name list.

Thus, here is my final wishes

df2_merge_ final:
name1   name2      score  weight
dan         lee      11    4
kim         lee      23    1
jackson     kim      44    3


我不知道还能尝试什么。有什么建议吗?谢谢:)

您可以添加由排序值填充的新列,然后使用
merge
删除不必要的列:

df1[['a','b']] = np.sort(df1[['playerA','playerB']], axis=1)
df2[['a','b']] = np.sort(df2[['name1','name2']], axis=1)

result = pd.merge(df1, df2, on=['a','b']).drop(['a','b','name1','name2'], axis=1)
print (result)
   playerA playerB  Weight  score
0      kim     lee       1     35
1  jackson     kim       3     44
2      dan     lee       4     11
3      dan     lee       4     27

如果需要第一个唯一的组合,请添加:


哇,谢谢你的帮助!
df1[['a','b']] = np.sort(df1[['playerA','playerB']], axis=1)
df2[['a','b']] = np.sort(df2[['name1','name2']], axis=1)

df2 = df2.drop_duplicates(['a','b'])

result = pd.merge(df1, df2, on=['a','b']).drop(['a','b','name1','name2'], axis=1)
print (result)
   playerA playerB  Weight  score
0      kim     lee       1     35
1  jackson     kim       3     44
2      dan     lee       4     11