Как использовать cbind в Python (эквивалентно R)


Функция cbind в R, сокращение от column-bind , может использоваться для объединения фреймов данных вместе по их столбцам.

Мы можем использовать функцию concat() из pandas для выполнения эквивалентной функции в Python:

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

В следующих примерах показано, как использовать эту функцию на практике.

Пример 1: Использование cbind в Python с одинаковыми значениями индекса

Предположим, у нас есть следующие два 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() , чтобы быстро связать эти два кадра данных вместе по их столбцам:

#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: Использование cbind в Python с неравными значениями индекса

Предположим, у нас есть следующие два 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

Обратите внимание, что два DataFrames не имеют одинаковых значений индекса.

Если мы попытаемся использовать функцию 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 DataFrames в несколько столбцов
Как выполнить ВПР в Pandas