合并两个不同长度的python pandas数据帧,但保留输出数据帧中的所有行

seq*_*ard 25 python merge dataframe pandas

我有以下问题:我有两个不同长度的pandas数据框,包含一些具有共同值的行和列,一些是不同的,如下所示:

df1:                                 df2:

      Column1  Column2  Column3           ColumnA  ColumnB ColumnC
    0    a        x        x            0    c        y       y
    1    c        x        x            1    e        z       z
    2    e        x        x            2    a        s       s
    3    d        x        x            3    d        f       f
    4    h        x        x
    5    k        x        x            
Run Code Online (Sandbox Code Playgroud)

我现在要做的是合并两个数据帧,以便如果ColumnA和Column1具有相同的值,则df2中的行将附加到df1中的相应行,如下所示:

df1:
    Column1  Column2  Column3  ColumnB  ColumnC
  0    a        x        x        s        s
  1    c        x        x        y        y
  2    e        x        x        z        z
  3    d        x        x        f        f
  4    h        x        x        NaN      NaN
  5    k        x        x        NaN      NaN
Run Code Online (Sandbox Code Playgroud)

我知道合并是可行的

df1.merge(df2,left_on='Column1', right_on='ColumnA')
Run Code Online (Sandbox Code Playgroud)

但是此命令会删除两个文件中Column1和ColumnA中不同的所有行.而不是我想在df1中保留这些行,只是在其他行具有df2值的列中为它们分配NaN,如上所示.在熊猫中有没有顺利的方法呢?

提前致谢!

Sin*_*ina 27

您可以在此处阅读文档:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

您正在寻找的是左连接.默认选项是内部联接.您可以通过传递不同的how参数来更改此行为:

df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA')
Run Code Online (Sandbox Code Playgroud)


小智 6

看起来你正在寻找像左连接这样的东西.看看这个例子是否有帮助:http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html#left-outer-join

您基本上可以将参数传递给merge()被调用how='left'


小智 5

您也可以简单地将 merge 与 using on 和 list 一起使用

result = df1.merge(df2, on=['Column1'])
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请点击 链接