合并数据框以保留所有项目熊猫

Posted

技术标签:

【中文标题】合并数据框以保留所有项目熊猫【英文标题】:Merging dataframes keeping all items pandas 【发布时间】:2017-08-13 21:49:54 【问题描述】:

如何合并两个不同的数据框,在填充空白的同时保留每个数据框的所有行?

DF1

Name     Addr      Num     Parent   Parent_Addr
Matt     123H      8       James    543F
Adam     213H      9       James    543F
James    321H      10      Mom      654F
Andrew   512F      10      Dad      665F
Faith    555A      7       None     657F

DF2

Name     Parent    Parent_Num  Parent_Addr
Matt     James     10          543F
Adam     James     10          543F
James    Mom       12          654F
None     Ian       13          656F
None     None      None        1234

预期输出

Name     Addr      Num     Parent   Parent_Num   Parent_Addr  
Matt     123H      8       James    10           543F
Adam     213H      9       James    10           543F
James    321H      10      Mom      12           654F
Andrew   512F      10      Dad      None         665F
Faith    555A      7       None     None         657F
None     None      None    Ian      13           656F
None     None      None    None     None         1234

我正在尝试合并并保留两个数据框中的所有数据。任何帮助将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

您可以使用'outer' merge 保留所有行注意默认情况下merge 将加入所有常见的列名。

df1.merge(df2, 'outer')

     Name  Addr   Num Parent Parent_Addr Parent_Num
0    Matt  123H   8.0  James        543F         10
1    Adam  213H   9.0  James        543F         10
2   James  321H  10.0    Mom        654F         12
3  Andrew  512F  10.0    Dad        665F        NaN
4   Faith  555A   7.0   None        657F        NaN
5    None   NaN   NaN    Ian        656F         13
6    None   NaN   NaN   None        1234       None

【讨论】:

【参考方案2】:

你需要合并所有公共列并使用外连接

pd.merge(df1, df2, on = ['Name', 'Parent', 'Parent_Addr'], how = 'outer')

    Name    Addr    Num Parent  Parent_Addr Parent_Num
0   Matt    123H    8   James   543F        10
1   Adam    213H    9   James   543F        10
2   James   321H    10  Mom     654F        12
3   Andrew  512F    10  Dad     665F        NaN
4   Faith   555A    7   None    657F        NaN
5   None    NaN     NaN Ian     656F        13
6   None    NaN     NaN None    1234        None

【讨论】:

列表是否应该是两个数据框之间相同的所有列?我看到您只指定了三列,并且是合并的新手。

以上是关于合并数据框以保留所有项目熊猫的主要内容,如果未能解决你的问题,请参考以下文章

将列添加到熊猫数据框以进行多索引

熊猫合并:合并同一列上的两个数据框,但保留不同的列

熊猫内部合并/加入返回所有行

切片熊猫数据框以获取不连续的列

如何重新索引熊猫数据框以将起始索引值重置为零? [重复]

熊猫(python):如何将列添加到数据框以进行索引?