我试图水平地连接两个数据帧。 df2包含df1中每个观察的2个结果变量。
df1.shape
(242583, 172)
df2.shape
(242583, 2)
我的代码是:
Fin = pd.concat([df1, df2], axis= 1)
但不知何故,结果分为两个维度:
Fin.shape
(485166, 174)
我在这里缺少什么?
答案 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 所示