连接公共索引上的数据帧

时间:2017-09-17 23:31:26

标签: python pandas dataframe concat

我目前正在编写一个程序,并且有两个数据帧,按字符串索引,格式如下:

         col5   col6
row1     81     58
row2     25     36
row3     67     70
row4     52     82

         col1   col2   col3   col4   col5   col6
row1     65      24     47     35    81     58
row2     33      48     25     89    25     36
row3     65      34     67     34    67     70
row4     24      12     52     17    52     82

并希望将框架合并/连接/连接成如下所示的内容:

         col1   col2   col3   col4  col5   col6
row1     65      24     47     35
row2     33      48     25     89
row3     65      34     67     34
row4     24      12     52     17
row1                                 81     58
row2                                 25     36
row3                                 67     70
row4                                 52     82

我已经尝试过各种方法,在阅读了关于合并/连接/加入的Pandas文档之后,我无法找到一种方法来执行这样的合并而没有重复的行索引,并且通常操作产生了一些东西看起来像这样:

{{1}}

然而,这不是我想要我的数据的格式。 什么是最有效的合并方式,以便将具有相同索引的值合并在一起?请注意,在某些情况下,数据框也可能具有不同的尺寸。

1 个答案:

答案 0 :(得分:0)

选项1
您可以沿第一个轴使用pd.concat

df1    
      col1  col2  col3  col4
row1    65    24    47    35
row2    33    48    25    89
row3    65    34    67    34
row4    24    12    52    17

df2    
      col5  col6
row1    81    58
row2    25    36
row3    67    70
row4    52    82

df = pd.concat([df1, df2], 1)
df
      col1  col2  col3  col4  col5  col6
row1    65    24    47    35    81    58
row2    33    48    25    89    25    36
row3    65    34    67    34    67    70
row4    24    12    52    17    52    82

如果您的索引存在问题,可以添加参数ignore_index=True

df = pd.concat([df1, df2], 1, ignore_index=True)
df
       0   1   2   3   4   5
row1  65  24  47  35  81  58
row2  33  48  25  89  25  36
row3  65  34  67  34  67  70
row4  24  12  52  17  52  82

选项2
使用df.align

df3, df4 = df1.align(df2)

df = df3.fillna(0) + df4.fillna(0)
df 

      col1  col2  col3  col4  col5  col6
row1  65.0  24.0  47.0  35.0  81.0  58.0
row2  33.0  48.0  25.0  89.0  25.0  36.0
row3  65.0  34.0  67.0  34.0  67.0  70.0
row4  24.0  12.0  52.0  17.0  52.0  82.0