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

python pandas: merge two data frame but didn't merge the repeat rows

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

df1 正在关注:

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

df2(只有一个column:name)如下:

     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

请举手,提前致谢!

如标题所示,您可以使用 merge 而不是 concat 并将 how 参数指定为 outer,因为您希望保留来自 df1df2 定义了一个外连接:

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