如何在Python中使用cbind (等同于R)

148 阅读3分钟

R中的cbind函数是column-bind的缩写,可以用来将数据帧按列组合在一起。

我们可以使用pandas的concat()函数来执行Python中的同等功能。

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

下面的例子展示了如何在实践中使用这个函数。

例1:在Python中使用cbind,索引值相等

假设我们有以下两个pandas DataFrames。

import pandas as pd

#define DataFrames
df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E'],
                    'points': [99, 91, 104, 88, 108]})

print(df1)

  team  points
0    A      99
1    B      91
2    C     104
3    D      88
4    E     108

df2 = pd.DataFrame({'assists': ['A', 'B', 'C', 'D', 'E'],
                    'rebounds': [22, 19, 25, 33, 29]})

print(df2)

  assists  rebounds
0       A        22
1       B        19
2       C        25
3       D        33
4       E        29

我们可以使用**concat()**函数来快速地将这两个DataFrames按列绑定在一起。

#column-bind two DataFrames into new DataFrame
df3 = pd.concat([df1, df2], axis=1)

#view resulting DataFrame
df3

	team	points	assists	rebounds
0	A	99	A	22
1	B	91	B	19
2	C	104	C	25
3	D	88	D	33
4	E	108	E	29

例2:在Python中使用cbind处理不相等的索引值

假设我们有以下两个 pandas DataFrames。

import pandas as pd

#define DataFrames
df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E'],
                    'points': [99, 91, 104, 88, 108]})

print(df1)

  team  points
0    A      99
1    B      91
2    C     104
3    D      88
4    E     108

df2 = pd.DataFrame({'assists': ['A', 'B', 'C', 'D', 'E'],
                    'rebounds': [22, 19, 25, 33, 29]})

df2.index = [6, 7, 8, 9, 10]

print(df2)

   assists  rebounds
6        A        22
7        B        19
8        C        25
9        D        33
10       E        29

注意,这两个 DataFrame 的索引值不一样。

如果我们试图使用**concat()**函数将它们绑定在一起,我们会得到以下结果。

#attempt to column-bind two DataFrames
df3 = pd.concat([df1, df2], axis=1)

#view resulting DataFrame
df3

	team	points	assists	rebounds
0	A	99.0	NaN	NaN
1	B	91.0	NaN	NaN
2	C	104.0	NaN	NaN
3	D	88.0	NaN	NaN
4	E	108.0	NaN	NaN
6	NaN	NaN	A	22.0
7	NaN	NaN	B	19.0
8	NaN	NaN	C	25.0
9	NaN	NaN	D	33.0
10	NaN	NaN	E	29.0

这不是我们想要的结果。

为了解决这个问题,我们需要在将它们串联在一起之前首先重置每个DataFrame的索引。

import pandas as pd

#define DataFrames
df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E'],
                    'points': [99, 91, 104, 88, 108]})

df2 = pd.DataFrame({'assists': ['A', 'B', 'C', 'D', 'E'],
                    'rebounds': [22, 19, 25, 33, 29]})

df2.index = [6, 7, 8, 9, 10]

#reset index of each DataFrame
df1.reset_index(drop=True, inplace=True)
df2.reset_index(drop=True, inplace=True)

#column-bind two DataFrames
df3 = pd.concat([df1, df2], axis=1)

#view resulting DataFrame
df3

	team	points	assists	rebounds
0	A	99	A	22
1	B	91	B	19
2	C	104	C	25
3	D	88	D	33
4	E	108	E	29

注意,这个DataFrame与我们在前面的例子中得到的一致。

其他资源

下面的教程解释了如何在Python中执行其他常见的操作。

如何在索引上合并两个Pandas数据框架
如何在多列上合并Pandas数据框架
如何在Pandas中进行VLOOKUP操作

The postHow to Use cbind in Python (Equivalent to R)appeared first onStatology.