← Назад к вопросам

Как работает merge в Pandas? Объясните разные типы объединения таблиц.?

1.2 Junior🔥 211 комментариев
#Python и инструменты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ответ: 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")
Как работает merge в Pandas? Объясните разные типы объединения таблиц.? | PrepBro