Pandas merge() — объединение двух объектов DataFrame
Функция Pandas DataFrame merge() используется для объединения двух объектов DataFrame с операцией соединения в стиле базы данных. Объединение выполняется по столбцам или индексам. Если объединение выполняется по столбцам, индексы игнорируются. Эта функция возвращает новый DataFrame, а исходные объекты DataFrame не изменяются.
Синтаксис функции Pandas DataFrame merge()
Синтаксис функции merge():
def merge(
self,
right,
how="inner",
on=None,
left_on=None,
right_on=None,
left_index=False,
right_index=False,
sort=False,
suffixes=("_x", "_y"),
copy=True,
indicator=False,
validate=None,
)
- справа: другой фрейм данных для объединения с исходным фреймом данных.
- как: {‘слева’, ‘справа’, ‘внешний’, ‘внутренний’}, по умолчанию ‘внутренний’. Это самый важный параметр для определения типа операции слияния. Они аналогичны левому внешнему соединению SQL, правому внешнему соединению, полному внешнему соединению и внутреннему соединению.
- on: Имена столбцов или уровней индекса для объединения. Эти столбцы должны присутствовать в обоих DataFrames. Если он не указан, используется пересечение столбцов в обоих кадрах данных.
- left_on: имена столбцов или уровней индекса для объединения в левом фрейме данных.
- right_on: имена столбцов или уровней индекса для объединения в правильном фрейме данных.
- left_index: используйте индекс из левого фрейма данных в качестве ключа(ов) соединения.
- right_index: используйте индекс из правого фрейма данных в качестве ключа соединения.
- sort: лексикографическая сортировка ключей соединения в результирующем DataFrame.
- суффиксы: суффикс, применяемый к перекрывающимся именам столбцов слева и справа соответственно.
- индикатор: если выбрано значение True, добавляется столбец в выходной DataFrame с именем \_merge с информацией об источнике каждой строки.
- validate: используется для проверки процесса слияния. Допустимые значения: {\one_to_one или \1:1, \one_to_many или \1:m, \many_to_one или \m:1, \many_to_many или \m: м”}.
Pandas DataFrame merge() Примеры
Давайте рассмотрим несколько примеров слияния двух объектов DataFrame.
1. Слияние по умолчанию — внутреннее соединение
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
2. Слияние фреймов данных с левым, правым и внешним соединением
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
3. Объединение DataFrame в определенные столбцы
import pandas as pd
d1 = {'Name': ['Pankaj', 'Meghna', 'Lisa'], 'ID': [1, 2, 3], 'Country': ['India', 'India', 'USA'],
'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Pankaj', 'Anupam', 'Amit']})
print(df1.merge(df2, on='ID'))
print(df1.merge(df2, on='Name'))
Выход:
Name_x ID Country Role Name_y
0 Pankaj 1 India CEO Pankaj
1 Meghna 2 India CTO Anupam
2 Lisa 3 USA CTO Amit
Name ID_x Country Role ID_y
0 Pankaj 1 India CEO 1
4. Укажите левый и правый столбцы для объединения объектов DataFrame.
import pandas as pd
d1 = {'Name': ['Pankaj', 'Meghna', 'Lisa'], 'ID1': [1, 2, 3], 'Country': ['India', 'India', 'USA'],
'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame({'ID2': [1, 2, 3], 'Name': ['Pankaj', 'Anupam', 'Amit']})
print(df1.merge(df2))
print(df1.merge(df2, left_on='ID1', right_on='ID2'))
Выход;
Name ID1 Country Role ID2
0 Pankaj 1 India CEO 1
Name_x ID1 Country Role ID2 Name_y
0 Pankaj 1 India CEO 1 Pankaj
1 Meghna 2 India CTO 2 Anupam
2 Lisa 3 USA CTO 3 Amit
5. Использование индекса в качестве ключей соединения для слияния фреймов данных
import pandas as pd
d1 = {'Name': ['Pankaj', 'Meghna', 'Lisa'], 'Country': ['India', 'India', 'USA'], 'Role': ['CEO', 'CTO', 'CTO']}
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Pankaj', 'Anupam', 'Amit']})
df_merged = df1.merge(df2)
print('Result Default Merge:\n', df_merged)
df_merged = df1.merge(df2, left_index=True, right_index=True)
print('\nResult Index Merge:\n', df_merged)
Выход:
Result Default Merge:
Name Country Role ID
0 Pankaj India CEO 1
Result Index Merge:
Name_x Country Role ID Name_y
0 Pankaj India CEO 1 Pankaj
1 Meghna India CTO 2 Anupam
2 Lisa USA CTO 3 Amit
Рекомендации
- Учебное пособие по Python Pandas
- Документ API API слияния DataFrame()