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

Posted

技术标签:

【中文标题】合并两个不同长度的python pandas数据帧,但将所有行保留在输出数据帧中【英文标题】:Merge two python pandas data frames of different length but keep all rows in output data frame 【发布时间】:2016-01-10 06:31:41 【问题描述】:

我有以下问题:我有两个不同长度的 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            

我现在要做的是合并两个数据帧,这样如果 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

我知道合并是可行的

df1.merge(df2,left_on='Column1', right_on='ColumnA')

但此命令会删除两个文件中 Column1 和 ColumnA 中所有不相同的行。相反,我想将这些行保留在 df1 中,并在其他行具有来自 df2 的值的列中将 NaN 分配给它们,如上所示。在 pandas 中是否有一种流畅的方法来做到这一点?

提前致谢!

【问题讨论】:

【参考方案1】:

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

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

df1.merge(df2,how='left', left_on='Column1', right_on='ColumnA')

【讨论】:

我觉得他其实是在找left加入:) 我会阅读文档,感谢您的快速答复!工作正常。【参考方案2】:

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

您基本上可以将参数传递给merge(),称为how='left'

【讨论】:

【参考方案3】:

您也可以简单地将合并与 using on 和 list 结合使用

result = df1.merge(df2, on=['Column1'])

更多信息请关注 link

【讨论】:

以上是关于合并两个不同长度的python pandas数据帧,但将所有行保留在输出数据帧中的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:如何在两个不同的重叠时间序列上合并两个数据帧

使用不同的时间间隔合并并填充Pandas中的两个数据帧

Python合并两个具有不同日期时间的数据框[重复]

Python pandas:合并两个没有键的表(将 2 个数据帧与广播所有元素相乘;NxN 数据帧)

合并两个 Pandas 数据帧,在一个时间列上重新采样,插值

合并 pandas 中列名不同且长度不同的两个数据框