Python pandas :垂直和水平连接 [英] Python pandas: concat vertical and horizontal

查看:137
本文介绍了Python pandas :垂直和水平连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试水平连接两个数据框.对于df1中的每个观察结果,df2包含2个结果变量.

I am trying to concat two dataframe, horizontally. df2 contains 2 result variables for every observation in df1.

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

我的代码是:

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

但是以某种方式将结果堆叠在两个维度中:

But somehow the result is stacked in 2 dimensions:

Fin.shape
(485166, 174)

我在这里想念什么?

推荐答案

索引值不同,因此索引未对齐并得到NaN s:

There are different index values, so indexes are not aligned and get NaNs:

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


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

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

One possible solution is create default indexes:

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

这篇关于Python pandas :垂直和水平连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆