基于具有相同值对但在两个数据帧中以不同顺序显示的两列合并数据帧

2024-09-29 23:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两只熊猫。它们有相同的赢家和输家名字对,但它们在两个数据帧中的顺序不同

DF1

     Winner       Loser         RankW   RankL

0    Fleishman Z.  Calleri A.   170.0   26.0
1    Roddick A.   Tsonga J.W.   7.0     212.0
2    Gasquet R.   Volandri F.   17.0    45.0

DF2

     Winner       Loser         WHand   LHand

0    Gasquet R.   Volandri F.   R       R  
1    Fleishman Z.  Calleri A.   L       R
2    Roddick A.   Tsonga J.W.   R       R

我想将它们合并到一个数据帧中,但是,每当我尝试它时,就会得到额外的行。 我想得到的是:

     Winner       Loser         RankW   RankL    WHand   LHand      

0    Fleishman Z.  Calleri A.   170.0   26.0     L       R
1    Roddick A.   Tsonga J.W.   7.0     212.0    R      R
2    Gasquet R.   Volandri F.   17.0    45.0     R      R

因此,我想按照DF1中对的顺序合并它们,但在DF2中添加WHand和LHand的对应值

我知道所有对都对应,因为我试图确定DF1中不在DF2中但没有的行

names = DF2[['Winner','Loser']]

df = DF1.merge(names, on=['Winner','Loser'],how = 'outer' ,indicator=True).loc[lambda x : x['_merge']=='left_only']

len(df)
Out: 0 

Tags: 数据顺序df1df2winnerloserlhandfleishman
1条回答
网友
1楼 · 发布于 2024-09-29 23:15:53

使用:

(df1.assign(index2 = df1.groupby(['Winner','Loser']).cumcount())
    .merge(df2.assign(index2 = df2.groupby(['Winner','Loser']).cumcount()),
           on = ['Winner','Loser', 'index2'])
    .drop(columns = 'index2'))

drop_duplicates

df1.merge(df2 ,on =['Winner','Loser']).drop_duplicates()

相关问题 更多 >

    热门问题