Python pandas:concat垂直和水平

时间:2018-03-14 12:21:41

标签: python pandas concatenation

我试图水平地连接两个数据帧。 df2包含df1中每个观察的2个结果变量。

df1.shape 
(242583, 172)
df2.shape
(242583, 2)

我的代码是:

Fin = pd.concat([df1, df2], axis= 1)

但不知何故,结果分为两个维度:

Fin.shape
(485166, 174)

我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

有不同的索引值,因此索引未对齐并获得df1 = pd.DataFrame({ 'A': ['a','a','a'], 'B': range(3) }) print (df1) A B 0 a 0 1 a 1 2 a 2 df2 = pd.DataFrame({ 'C': ['b','b','b'], 'D': range(4,7) }, index=[5,7,8]) print (df2) C D 5 b 4 7 b 5 8 b 6 s:

Fin = pd.concat([df1, df2], axis= 1)
print (Fin)
     A    B    C    D
0    a  0.0  NaN  NaN
1    a  1.0  NaN  NaN
2    a  2.0  NaN  NaN
5  NaN  NaN    b  4.0
7  NaN  NaN    b  5.0
8  NaN  NaN    b  6.0
Fin = pd.concat([df1.reset_index(drop=True), df2.reset_index(drop=True)], axis= 1)
print (Fin)
   A  B  C  D
0  a  0  b  4
1  a  1  b  5
2  a  2  b  6

一种可能的解决方案是创建默认索引:

df2.index = df1.index
Fin = pd.concat([df1, df2], axis= 1)
print (Fin)
   A  B  C  D
0  a  0  b  4
1  a  1  b  5
2  a  2  b  6

df1.index = df2.index
Fin = pd.concat([df1, df2], axis= 1)
print (Fin)
   A  B  C  D
5  a  0  b  4
7  a  1  b  5
8  a  2  b  6

或指定:

{{1}}

答案 1 :(得分:0)

如果您正在寻找单线,有 set_index 方法:

import pandas as pd
x = pd.DataFrame({'A': ["a"] * 3, 'B': range(3)})
y = pd.DataFrame({'C': ["b"] * 3, 'D': range(4,7)})
pd.concat([x, y.set_index(x.index)], axis = 1)

请注意,pd.concat([x, y], axis = 1) 将改为创建新行并生成 NA 值,因为索引不匹配,如@jezrael 所示