Объединить pandas фреймов данных на основе двух столбцов с одинаковой парой значений, но отображаемых в разных порядках на двух фреймах данных - PullRequest
2 голосов
/ 17 марта 2020

У меня есть два pandas кадра данных. У них одинаковые пары имен победителей и проигравших, но они находятся в разных порядках в двух кадрах данных.

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

Я хочу объединить их в один Dataframe, однако всякий раз, когда я пытаюсь это сделать, я получаю дополнительные строки. То, что я хочу получить:

     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, но добавив соответствующие значения WHand и LHand в DF2.

I Я знаю, что все пары соответствуют, потому что я попытался определить строки в 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 

1 Ответ

0 голосов
/ 17 марта 2020

Использование:

(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()
...