Как работает merge в Pandas? Объясните разные типы объединения таблиц.?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Ответ: Merge в Pandas и типы объединения таблиц
Что такое merge и зачем он нужен
Merge в Pandas — это операция объединения двух DataFrame на основе одного или нескольких общих столбцов (ключей). Это функция, которая работает как SQL JOIN и позволяет комбинировать данные из разных источников по определённому условию.
import pandas as pd
# Базовый синтаксис
result = pd.merge(left_df, right_df, on="key_column", how="inner")
Четыре основных типа объединения
1. INNER JOIN (внутреннее объединение)
Возвращает только строки, где ключ существует в обеих таблицах. Это самый консервативный подход — теряются все неподходящие строки.
# Пример
left = pd.DataFrame({"ID": [1, 2, 3], "Name": ["Alice", "Bob", "Charlie"]})
right = pd.DataFrame({"ID": [1, 2, 4], "Salary": [50000, 60000, 70000]})
result = pd.merge(left, right, on="ID", how="inner")
# Результат: 2 строки (только ID 1 и 2)
Когда использовать: Когда нужны только подтверждённые совпадения. Например, объединение заказов с доставками (только доставленные заказы).
2. LEFT JOIN (левое объединение)
Сохраняет все строки из левого DataFrame, добавляя данные из правого. Если совпадения нет — значения из правого DataFrame будут NaN.
result = pd.merge(left, right, on="ID", how="left")
# Результат: 3 строки (все из left), Charlie будет иметь NaN в Salary
Когда использовать: При анализе полного списка пользователей с их опциональными действиями (например, все пользователи + их покупки, если они были).
3. RIGHT JOIN (правое объединение)
Противоположность LEFT JOIN — сохраняет все строки из правого DataFrame.
result = pd.merge(left, right, on="ID", how="right")
# Результат: 3 строки (все из right), и будет добавлена строка для ID 4
4. OUTER JOIN (полное внешнее объединение)
Возвращает все строки из обоих DataFrame. Где совпадений нет — появляются NaN значения.
result = pd.merge(left, right, on="ID", how="outer")
# Результат: 4 строки (все из left и right)
Когда использовать: При сравнительном анализе двух источников, когда важно увидеть разницу в данных.
Продвинутые возможности
Объединение по разным названиям столбцов:
result = pd.merge(left, right, left_on="UserID", right_on="ID", how="inner")
Объединение по индексам:
result = pd.merge(left, right, left_index=True, right_index=True)
Объединение по нескольким столбцам:
result = pd.merge(left, right, on=["ID", "Date"], how="inner")
Практический пример для Product Analyst
# Объединение таблиц пользователей и их событий
users = pd.read_sql("SELECT user_id, registration_date FROM users", conn)
events = pd.read_sql("SELECT user_id, event_type, event_date FROM events", conn)
# Получаем всех пользователей и их события (если они есть)
user_events = pd.merge(users, events, on="user_id", how="left")
# Анализируем, сколько пользователей совершили событие
active_users = user_events[user_events["event_type"].notna()].drop_duplicates("user_id")