【发布时间】: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_duplicatesdf1.merge(df2 ,on =['Winner','Loser']).drop_duplicates()
标签: python pandas dataframe merge data-cleaning