0Pricing
Learn AI with Python · Урок

Расширенное объединение и соединение

pd.merge() с how, on, left_on/right_on, suffixes и merge_asof для соединений по времени.

«Расширенное объединение и соединение» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Объединение DataFrames

pd.merge объединяет два DataFrames по общим ключам, точно как JOIN в реляционных данных. Освоение вариантов how необходимо для работы со связанными данными.

import pandas as pd
left = pd.DataFrame({"id": [1, 2, 3], "name": ["a", "b", "c"]})
right = pd.DataFrame({"id": [2, 3, 4], "score": [90, 80, 70]})

Внутреннее соединение (по умолчанию)

how="inner" сохраняет только ключи, присутствующие в обеих (BOTH) таблицах. Это вариант по умолчанию.

print(pd.merge(left, right, on="id", how="inner"))
#    id name  score
# 0   2    b     90
# 1   3    c     80

Левое соединение

how="left" сохраняет каждую строку из левой таблицы; для несопоставленных столбцов справа появляются значения NaN. Это самое распространённое соединение в аналитике.

print(pd.merge(left, right, on="id", how="left"))
#    id name  score
# 0   1    a    NaN
# 1   2    b   90.0
# 2   3    c   80.0

Внешнее соединение

how="outer" сохраняет все ключи с обеих сторон, заполняя пропуски значениями NaN. Используйте его, чтобы увидеть полное объединение записей.

print(pd.merge(left, right, on="id", how="outer"))
# includes id 1 (no score) and id 4 (no name)

Соединение по столбцам с разными именами

Если ключевые столбцы называются по-разному, используйте left_on и right_on вместо on.

r2 = right.rename(columns={"id": "user_id"})
print(pd.merge(left, r2, left_on="id", right_on="user_id"))

Суффиксы для пересекающихся столбцов

Если в обеих таблицах есть столбец с одинаковым именем, к нему добавляются _x и _y. Для ясности переопределите их с помощью suffixes.

a = pd.DataFrame({"id": [1], "val": [10]})
b2 = pd.DataFrame({"id": [1], "val": [99]})
print(pd.merge(a, b2, on="id", suffixes=("_old", "_new")))

Столбец-индикатор

indicator=True добавляет столбец _merge, показывающий источник каждой строки: только слева, только справа или в обеих таблицах. Для проверки соединений это незаменимый инструмент.

print(pd.merge(left, right, on="id", how="outer", indicator=True))
# _merge tells you where each row came from

Диагностика проблем соединения

Фильтрация по индикатору быстро показывает несопоставленные ключи — распространённую причину незаметной потери данных.

m = pd.merge(left, right, on="id", how="outer", indicator=True)
print(m[m["_merge"] != "both"])   # rows that did not match

Объединение по времени с помощью merge_asof

pd.merge_asof объединяет по ближайшему ключу, а не по точному совпадению. Эта функция специально предназначена для выравнивания временных рядов, например для сопоставления каждой сделки с последней котировкой, предшествующей ей. Оба фрейма должны быть отсортированы по ключу.

trades = pd.DataFrame({"time": [1, 3, 7], "price": [10, 11, 12]})
quotes = pd.DataFrame({"time": [0, 2, 5], "bid": [9, 10, 11]})
print(pd.merge_asof(trades, quotes, on="time"))

Направление merge_asof

По умолчанию merge_asof выполняет поиск BACKWARD (последний ключ в этот момент или ранее). Используйте direction="forward" или "nearest", чтобы изменить правило сопоставления.

print(pd.merge_asof(trades, quotes, on="time", direction="nearest"))

Выбор подходящего объединения

Используйте внутреннее объединение, чтобы оставить только совпадения, левое — чтобы дополнить основную таблицу, внешнее — чтобы получить полное объединение, а merge_asof — для объединений по времени с приблизительным ключом.

Быстрая проверка

Проверьте свои знания об объединениях.

Итоги

Инструменты объединения:

  • how= inner / left / outer определяет, какие ключи сохраняются
  • on и left_on/right_on используются для столбцов ключей
  • suffixes устраняет неоднозначность перекрывающихся имён
  • indicator=True позволяет проверить источники строк
  • pd.merge_asof используется для объединений по времени с ближайшим ключом (сначала отсортируйте данные)

Часто задаваемые вопросы

Урок «Расширенное объединение и соединение» бесплатный?

Да — полный текст урока «Расширенное объединение и соединение» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Расширенное объединение и соединение»?

pd.merge() с how, on, left_on/right_on, suffixes и merge_asof для соединений по времени. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Расширенное объединение и соединение»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. GroupBy и агрегация
  2. Сводные таблицы и перекрёстная агрегация
  3. Расширенное объединение и соединение
  4. Временные ряды в Pandas
← Назад к Learn AI with Python