Как объединить Pandas DataFrames в несколько столбцов


Часто вы можете захотеть объединить два кадра данных pandas в нескольких столбцах. К счастью, это легко сделать с помощью функции pandas merge() , которая использует следующий синтаксис:

pd.merge(df1, df2, left_on=['col1','col2'], right_on = ['col1','col2'])

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

Пример 1: объединение нескольких столбцов с разными именами

Предположим, у нас есть следующие два Pandas DataFrames:

import pandas as pd

#create and view first DataFrame
df1 = pd.DataFrame({'a1': [0, 0, 1, 1, 2],
 'b': [0, 0, 1, 1, 1],
 'c': [11, 8, 10, 6, 6]})

print(df1)

 a1 b c
0 0 0 11
1 0 0 8
2 1 1 10
3 1 1 6
4 2 1 6

#create and view second DataFrame 
df2 = pd.DataFrame({'a2': [0, 1, 1, 1, 3],
 'b': [0, 0, 0, 1, 1],
 'd': [22, 24, 25, 33, 37]})

print(df2)

 a2 b d
0 0 0 22
1 1 0 24
2 1 0 25
3 1 1 33
4 3 1 37

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

pd.merge(df1, df2, how='left', left_on=['a1', 'b'], right_on = ['a2',' b'])


 a1 b c a2 d
0 0 0 11 0.0 22.0
1 0 0 8 0.0 22.0
2 1 1 10 1.0 33.0
3 1 1 6 1.0 33.0
4 2 1 6 NaN NaN

Пример 2: объединение нескольких столбцов с одинаковыми именами

Предположим, у нас есть следующие два кадра данных pandas с одинаковыми именами столбцов:

import pandas as pd

#create DataFrames
df1 = pd.DataFrame({'a': [0, 0, 1, 1, 2],
 'b': [0, 0, 1, 1, 1],
 'c': [11, 8, 10, 6, 6]})

df2 = pd.DataFrame({'a': [0, 1, 1, 1, 3],
 'b': [0, 0, 0, 1, 1],
 'd': [22, 24, 25, 33, 37]})

В этом случае мы можем упростить использование on = ['a', 'b'], поскольку имена столбцов одинаковы в обоих DataFrames:

pd.merge(df1, df2, how='left', on=['a', 'b'])

 a b c d
0 0 0 11 22.0
1 0 0 8 22.0
2 1 1 10 33.0
3 1 1 6 33.0
4 2 1 6 NaN

Дополнительные ресурсы

Как объединить два кадра данных Pandas в индексе
Как сложить несколько фреймов данных Pandas