pandas 相当于 R 的 cbind(垂直连接/堆叠向量)

Posted

技术标签:

【中文标题】pandas 相当于 R 的 cbind(垂直连接/堆叠向量)【英文标题】:pandas equivalent of R's cbind (concatenate/stack vectors vertically) 【发布时间】:2015-04-20 04:01:23 【问题描述】:

假设我有两个数据框:

import pandas
....
....
test1 = pandas.DataFrame([1,2,3,4,5])
....
....
test2 = pandas.DataFrame([4,2,1,3,7])
....

我试过test1.append(test2),但它相当于R的rbind

如何将两者组合为类似于 R 中的 cbind 函数的数据框的两列?

【问题讨论】:

【参考方案1】:
test3 = pd.concat([test1, test2], axis=1)
test3.columns = ['a','b']

【讨论】:

我这样做了,它正在添加行,就好像它是一个连接——这根本不是我想要的。 axis=2 是你想要的吗? 为了完整起见:***.com/questions/33088010/… axis = 0 就是你想要的。【参考方案2】:

pandas 中的 concat(axis = 1) 和 R 中的 cbind() 有一个关键区别:

concat 尝试按索引合并/对齐。 R 数据框中没有索引的概念。如果两个 pandas 数据帧的索引未对齐,则结果与 cbind 不同(即使它们具有相同的行数)。您需要确保索引对齐或删除/重置索引。

例子:

import pandas as pd

test1 = pd.DataFrame([1,2,3,4,5])
test1.index = ['a','b','c','d','e']
test2 = pd.DataFrame([4,2,1,3,7])
test2.index = ['d','e','f','g','h']

pd.concat([test1, test2], axis=1)

     0    0
a  1.0  NaN
b  2.0  NaN
c  3.0  NaN
d  4.0  4.0
e  5.0  2.0
f  NaN  1.0
g  NaN  3.0
h  NaN  7.0

pd.concat([test1.reset_index(drop=True), test2.reset_index(drop=True)], axis=1)

   0  1
0  1  4
1  2  2
2  3  1
3  4  3
4  5  7

pd.concat([test1.reset_index(), test2.reset_index(drop=True)], axis=1)      

  index  0  0
0     a  1  4
1     b  2  2
2     c  3  1
3     d  4  3
4     e  5  7

【讨论】:

以上是关于pandas 相当于 R 的 cbind(垂直连接/堆叠向量)的主要内容,如果未能解决你的问题,请参考以下文章

R语言数据横向合并cbind函数实战

r Cbind.R

【R】行或列数目不同的两个数据框如何用rbind/cbind合并?

pandas表连接

R语言使用sapply函数抽取strsplit分裂后的结果数据并使用cbind纵向合并到dataframe数据列中使用order函数对dataframe数据行进行排序

循环在R中创建几个矩阵(可能使用粘贴)