合并两个不同长度的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数据帧,但将所有行保留在输出数据帧中的主要内容,如果未能解决你的问题,请参考以下文章
Python pandas:合并两个没有键的表(将 2 个数据帧与广播所有元素相乘;NxN 数据帧)