有没有办法在行和列索引上合并熊猫数据框?

Posted

技术标签:

【中文标题】有没有办法在行和列索引上合并熊猫数据框?【英文标题】:Is there a way to merge pandas dataframes on row and column index? 【发布时间】:2019-06-29 13:07:04 【问题描述】:

我想合并两个共享相同索引以及某些列的 pandas 数据框。 pd.merge 创建重复的列,但我想同时在两个轴上合并。

尝试了 pd.merge 和 pd.concat 但没有得到正确的结果。

我的尝试:df3=pd.merge(df1, df2, left_index=True, right_index=True, how='left')

df1

     Var#1  Var#2  Var#3  Var#4  Var#5  Var#6  Var#7
ID                                                  
323      7      6      8    7.0    2.0    2.0   10.0
324      2      1      5    3.0    4.0    2.0    1.0
675      9      8      1    NaN    NaN    NaN    NaN
676      3      7      2    NaN    NaN    NaN    NaN

df2

     Var#6  Var#7  Var#8  Var#9
ID                             
675      1      9      2      8
676      3      2      0      7

理想情况下我会得到:

df3

     Var#1  Var#2  Var#3  Var#4  Var#5  Var#6  Var#7 Var#8   Var#9
ID                                                  
323      7      6      8    7.0    2.0    2.0   10.0  NaN    NaN
324      2      1      5    3.0    4.0    2.0    1.0  NaN    NaN
675      9      8      1    NaN    NaN    1      9    2      8
676      3      7      2    NaN    NaN    3      2    0      7

【问题讨论】:

非常感谢,成功了。我不知道这种方法。 【参考方案1】:

IIUC,使用df.combine_first()

df3=df1.combine_first(df2)
print(df3)

      Var#1  Var#2  Var#3  Var#4  Var#5  Var#6  Var#7  Var#8  Var#9
ID                                                                
323      7      6      8    7.0    2.0    2.0   10.0    NaN    NaN
324      2      1      5    3.0    4.0    2.0    1.0    NaN    NaN
675      9      8      1    NaN    NaN    1.0    9.0    2.0    8.0
676      3      7      2    NaN    NaN    3.0    2.0    0.0    7.0

【讨论】:

谢谢,试过了。我真的很想在输出中的一列中包含两个数据框中同一列的值,例如不应有两列名为 Var#6。【参考方案2】:

您可以连接和分组数据

pd.concat([df1, df2], 1).groupby(level = 0, axis = 1).first()

    Var#1   Var#2   Var#3   Var#4   Var#5   Var#6   Var#7   Var#8   Var#9
ID                                  
323 7.0     6.0     8.0     7.0     2.0     2.0     10.0    NaN     NaN
324 2.0     1.0     5.0     3.0     4.0     2.0     1.0     NaN     NaN
675 9.0     8.0     1.0     NaN     NaN     1.0     9.0     2.0     8.0
676 3.0     7.0     2.0     NaN     NaN     3.0     2.0     0.0     7.0

【讨论】:

@anky_91,谢谢。我们都处于不同的学习阶段:)

以上是关于有没有办法在行和列索引上合并熊猫数据框?的主要内容,如果未能解决你的问题,请参考以下文章

数据框划分后,熊猫样式无法在多索引上设置背景渐变

用于搜索的 Pandas 列索引?

将列索引从0重命名为最后一列熊猫

如何在日期时间索引和两列上合并熊猫数据框

熊猫:从日期时间索引合并日期和小时

R dplyr 在列索引上发生变异