合并两个不同的数据帧与Pandas

时间:2018-05-23 14:55:34

标签: python pandas

我是熊猫新手,我需要完成以下任务,有没有一种有效的方法呢? 有两种不同的数据帧,dfa和dfb: dfa

dfb

我用它将它们合并在一起:

df = pd.merge(dfa, dfb, left_on = ['a_retry','a_cca', 'a_rssif', 'a_lqif'], right_on = ['b_retry','b_cca', 'b_rssif', 'b_lqif'])

我得到了df输出: df

然而,这不是我的期望。 合并的数据帧包含所有列,没关系,但行不应超过较小的行(也称为dfa),这意味着必须删除行3,预期的行是: enter image description here 我怎样才能做到这一点?感谢。

1 个答案:

答案 0 :(得分:0)

预计,因为所有4列都有重复。

因此需要按drop_duplicates删除重复行:

dfa = dfa.drop_duplicates(subset=['a_retry','a_cca', 'a_rssif', 'a_lqif'])
dfb = dfb.drop_duplicates(subset=['b_retry','b_cca', 'b_rssif', 'b_lqif'])

但是如果需要匹配重复的行,是否可以使用cumcount的新列,该列用于merge

dfa['new'] = dfa.groupby(['a_retry','a_cca', 'a_rssif', 'a_lqif']).cumcount()
dfb['new'] = dfb.groupby(['b_retry','b_cca', 'b_rssif', 'b_lqif']).cumcount()

df = (pd.merge(dfa, 
               dfb, 
               left_on = ['a_retry','a_cca', 'a_rssif', 'a_lqif', 'new'], 
               right_on = ['b_retry','b_cca', 'b_rssif','b_lqif', 'new']).drop('new', axis=1))