Часто вы можете захотеть объединить два кадра данных 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