python pandas:合并两个数据框但没有合并重复行

时间:2016-08-30 03:23:24

标签: python pandas merge concat

我有两个数据帧:df1和df2。

df1如下:

    name  exist
     a      1
     b      1
     c      1
     d      1
     e      1

df2(只有一列:名称)如下:

     name  
      e      
      f      
      g      
      a     
      h     

我想合并这两个数据帧,并没有合并重复名称,我的意思是,如果df2中的名称存在于df1中,只显示一次,否则如果名称df2不存在于df1中,则设置存在的值是0或Nan。例如df1(有a和e),和df2(有a和e,只显示a,e一次),我想成为以下df:

     a      1
     b      1
     c      1
     d      1
     e      1
     f      0 
     g      0
     h      0

我使用concat函数来完成它,我的代码如下:

import pandas as pd


df1 = pd.DataFrame({'name': ['a', 'b', 'c', 'd', 'e'],
                'exist': ['1', '1', '1', '1', '1']})
df2 = pd.DataFrame({'name': ['e', 'f', 'g', 'h', 'a']})
df = pd.concat([df1, df2])
print(df)

但结果是错误的(名称a和e重复显示):

  exist name
 0     1    a
 1     1    b 
 2     1    c
 3     1    d
 4     1    e
 0   NaN    e
 1   NaN    f
 2   NaN    g
 3   NaN    h
 4   NaN    a

请提前致谢!

1 个答案:

答案 0 :(得分:1)

如标题所示,您可以使用merge代替concat,并将how参数指定为outer,因为您要保留df1的所有记录}和df2定义外连接:

import pandas as pd
pd.merge(df1, df2, on = 'name', how = 'outer').fillna(0)

# exist name
# 0   1    a
# 1   1    b
# 2   1    c
# 3   1    d
# 4   1    e
# 5   0    f
# 6   0    g
# 7   0    h