合并数据帧而不复制python pandas中的行

时间:2017-11-22 16:10:24

标签: python pandas dataframe merge

我希望使用类似的列结合两个数据框' A':

>>> df1
    A   B
0   I   1
1   I   2
2   II  3

>>> df2
    A   C
0   I   4
1   II  5
2   III 6

为此,我尝试使用:

  

merged = pd.merge(df1,df2,on =' A',how =' outer')

返回了:

>>> merged
    A   B   C
0   I   1.0 4
1   I   2.0 4
2   II  3.0 5
3   III NaN 6

但是,由于df2只包含A ==' I'的一个值,因此我不希望在合并的数据帧中复制此值。相反,我想要以下输出:

>>> merged
    A   B   C
0   I   1.0 4
1   I   2.0 NaN
2   II  3.0 5
3   III NaN 6

最好的方法是什么?我是python的新手,并且仍然与所有join / merge / concatenate / append操作稍微混淆。

1 个答案:

答案 0 :(得分:5)

让我们按cumcount

创建一个新变量g
df1['g']=df1.groupby('A').cumcount()
df2['g']=df2.groupby('A').cumcount()
df1.merge(df2,how='outer').drop('g',1)
Out[62]: 
     A    B    C
0    I  1.0  4.0
1    I  2.0  NaN
2   II  3.0  5.0
3  III  NaN  6.0