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

标签 python pandas merge dataframe

我有以下问题:我有两个不同长度的 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 中是否有一种流畅的方法来做到这一点?

提前致谢!

最佳答案

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

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

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

关于python - 合并两个不同长度的python pandas数据帧,但将所有行保留在输出数据帧中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33086881/

相关文章:

python - 使用 GraphQL 和 Graphene-Python 从数据库中选择仅请求的字段

python - 将 Django TimeField 与时区感知日期时间进行比较;将原始时间与 timezone.now() 进行比较

python - 一起使用 virtualenvwrapper 和 pyenv

python - Pandas 的百分位排名

python-3.x - 如何在 pandas 的 4 个数据帧上进行多种类型的连接

php - 连接数组以进入多维数组

python - argparse(和已弃用的 optparse)如何在 bash 中响应 python 程序名称后的 'tab' 按键?

python - Pandas to_sql 中行的排序

Javascript 嵌套对象默认回退选项

Mercurial 工作流程 : why do I seem to commit everything twice?