【问题标题】:Merge pandas data frames based on two columns with the same pair of values but displayed in different orders in the two dataframes基于具有相同值对但在两个数据框中以不同顺序显示的两列合并熊猫数据框
【发布时间】:2020-06-28 21:18:20
【问题描述】:

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

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 

【问题讨论】:

  • 你能举一个更有代表性的例子吗? df1.merge(df2 ,on =['Winner','Loser']) 使用这些数据框
  • 相关question
  • @ansev 真正的数据框有数千条数据,但它们都有 5588 行,合并结果为 7120 行
  • 是的,但如果为真,请尝试 df1.duplicated(['Winner','Loser']).any()df2.duplicated(['Winner','Loser']).any(),这就是使用合并时行数更多的原因
  • 尝试: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()

标签: python pandas dataframe merge data-cleaning


【解决方案1】:

用途:

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

【讨论】:

    猜你喜欢
    • 2016-08-12
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多