有没有一种方法可以在行和列索引上合并pandas数据框?

4
我希望合并两个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
非常感谢,这解决了问题。我之前不知道有这个方法。 - Nicolas
2个回答

4

理解我所说的,使用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的列。 - Nicolas

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接