Python 在公共索引上连接数据帧

Python 在公共索引上连接数据帧,python,pandas,dataframe,concat,Python,Pandas,Dataframe,Concat,我目前正在编写一个程序,有两个数据帧,按字符串索引,格式如下: col1 col2 col3 col4 row1 65 24 47 35 row2 33 48 25 89 row3 65 34 67 34 row4 24 12 52 17 及 并希望将这些帧合并/连接/连接成如下所示的内容: col1 col

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

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

并希望将这些帧合并/连接/连接成如下所示的内容:

         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关于合并/连接/连接的文档之后,我都无法找到一种在没有重复行索引的情况下执行这种合并的方法,通常操作会产生如下结果:

         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
但是,这不是我想要的数据格式。 执行合并的最有效方法是什么,以便将具有相同索引的值合并在一起?请注意,在某些情况下,数据帧的尺寸也可能不同。

pd.concat
沿第一个轴 如果索引有问题,可以添加一个参数
ignore\u 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

DataFrame.align
另一种选择,

df3, df4 = df1.align(df2)    
df3.fillna(0) + df4.fillna(0)

      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

让我们看看你试过什么。这是一个简单的水平合并:
pd.concat([df1,df2],axis=1)
;我得到以下错误:ValueError:传递值的形状是(8,35),索引暗示(8,34)concat应该可以工作,但我认为我遇到了一个错误,因为我试图合并两个形状/大小不等的数据帧。使用pd.concat会产生以下错误:ValueError:传递值的形状是(8,35),索引暗示(8,34)可能是我的索引有问题?奇怪的是,数据帧是由strings@ice_cream试试这个:
df1,df2=df1.align(df2);df=df1+df2
@雪糕等等,我需要给你那行的一个修改版本。@ice雪糕所有的列都是数字吗?如果是,您可以这样做:
df3,df4=df1.align(df2);df=df3.fillna(0)+df4.fillna(0)
列也通过字符串索引