Pandas.Merge () – объединение двух объектов DataFrame

Источник: https://www.digitalocean.com/community/tutorials/pandas-merge-two-dataframe

При работе с датасетеми переодически их приходится объеденять. К примеру есть датасет с пользователями и продажами, и нужно посчитать какие-то оъедененные данные. В Pandas для этих целей есть функция Pandas.Merge ()

Функция используется для объединения двух объектов DataFrame с операцией соединения в стиле базы данных. Соединение выполняется на столбцах или индексах.

Если соединение сделано на столбцах, индексы игнорируются. Эта функция возвращает новый DataFrame и объекты источника DataFrame без изменений.

В своей практике я использую обычно left join или inner join. Собственно про них будет написано ниже.

Объединение по умолчанию – inner join

import pandas as pd

d1 = {'Name': ['Pankaj', 'Meghna', 'Lisa'], 'Country': ['India', 'India', 'USA'], 'Role': ['CEO', 'CTO', 'CTO']}

df1 = pd.DataFrame(d1)

print('DataFrame 1:\n', df1)

df2 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Pankaj', 'Anupam', 'Amit']})
print('DataFrame 2:\n', df2)
df_merged = df1.merge(df2)
print('Result:\n', df_merged)

Результат:

DataFrame 1:
      Name Country Role
0  Pankaj   India  CEO
1  Meghna   India  CTO
2    Lisa     USA  CTO

DataFrame 2:
    ID    Name
0   1  Pankaj
1   2  Anupam
2   3    Amit
Result:
      Name Country Role  ID
0  Pankaj   India  CEO   1

Объеденение при помощи Left, Right, and Outer Join

print('Result Left Join:\n', df1.merge(df2, how='left'))
print('Result Right Join:\n', df1.merge(df2, how='right'))
print('Result Outer Join:\n', df1.merge(df2, how='outer'))

Результат:

Result Left Join:
      Name Country Role   ID
0  Pankaj   India  CEO  1.0
1  Meghna   India  CTO  NaN
2    Lisa     USA  CTO  NaN

Result Right Join:
      Name Country Role  ID
0  Pankaj   India  CEO   1
1  Anupam     NaN  NaN   2
2    Amit     NaN  NaN   3
Result Outer Join:
      Name Country Role   ID
0  Pankaj   India  CEO  1.0
1  Meghna   India  CTO  NaN
2    Lisa     USA  CTO  NaN
3  Anupam     NaN  NaN  2.0
4    Amit     NaN  NaN  3.0