РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
394 of 687 menu

Функция merge_asof

Функция merge_asof в Pandas предназначена для выполнения асимметричного слияния двух таблиц DataFrame по ключу, где значения во второй таблице подбираются по ближайшему совпадению к ключу первой таблицы. Это особенно полезно при работе с временными рядами, финансовыми данными или любыми другими упорядоченными числовыми последовательностями. В отличие от обычного слияния merge, которое требует точного совпадения ключей, merge_asof находит для каждой строки левой таблицы строку из правой таблицы с ближайшим значением ключа, не превышающим значение ключа в левой таблице (по умолчанию). Функция поддерживает настройку направления поиска, допуск на разницу значений, а также работу с несколькими ключами.

Синтаксис

pd.merge_asof(left, right, on=None, left_on=None, right_on=None, left_index=False, right_index=False, by=None, left_by=None, right_by=None, suffixes=('_x', '_y'), tolerance=None, allow_exact_matches=True, direction='backward')

Основные параметры

Функция принимает следующие ключевые параметры:

  • left, right - левая и правая таблицы для слияния.
  • on - имя столбца для слияния, которое должно присутствовать в обеих таблицах.
  • left_on, right_on - имена столбцов для слияния в левой и правой таблицах соответственно.
  • by - столбец для группировки перед слиянием (точное совпадение по этому столбцу обязательно).
  • tolerance - максимальная допустимая разница между ключами. Если расстояние превышает указанное значение, соответствующая строка не будет найдена.
  • direction - направление поиска: 'backward' (по умолчанию, ищет ближайшее меньшее или равное значение), 'forward' (ближайшее большее или равное) или 'nearest' (ближайшее по абсолютной разнице).
  • allow_exact_matches - разрешить точные совпадения. Если установить в False, точные совпадения будут пропущены.

Пример

Базовое использование функции для слияния двух таблиц с временными метками:

import pandas as pd left = pd.DataFrame({ 'a': [1, 2, 3, 4, 5], 'b': ['L1', 'L2', 'L3', 'L4', 'L5'] }) right = pd.DataFrame({ 'a': [1, 3, 4, 6], 'c': ['R1', 'R2', 'R3', 'R4'] }) res = pd.merge_asof(left, right, on='a') print(res)

Результат выполнения кода:

a b c 0 1 L1 R1 1 2 L2 R1 2 3 L3 R2 3 4 L4 R3 4 5 L5 R3

Пример

Использование параметра tolerance для ограничения максимальной разницы между ключами:

import pandas as pd left = pd.DataFrame({ 'a': [1, 2, 3, 4, 5], 'b': ['L1', 'L2', 'L3', 'L4', 'L5'] }) right = pd.DataFrame({ 'a': [1, 3, 4, 6], 'c': ['R1', 'R2', 'R3', 'R4'] }) res = pd.merge_asof(left, right, on='a', tolerance=1) print(res)

Результат выполнения кода:

a b c 0 1 L1 R1 1 2 L2 R1 2 3 L3 R2 3 4 L4 R3 4 5 L5 NaN

Пример

Использование параметра direction для поиска ближайшего большего значения:

import pandas as pd left = pd.DataFrame({ 'a': [1, 2, 3, 4, 5], 'b': ['L1', 'L2', 'L3', 'L4', 'L5'] }) right = pd.DataFrame({ 'a': [1, 3, 4, 6], 'c': ['R1', 'R2', 'R3', 'R4'] }) res = pd.merge_asof(left, right, on='a', direction='forward') print(res)

Результат выполнения кода:

a b c 0 1 L1 R1 1 2 L2 R2 2 3 L3 R2 3 4 L4 R3 4 5 L5 R4

Пример

Использование параметра by для группировки данных перед слиянием:

import pandas as pd left = pd.DataFrame({ 'group': ['A', 'A', 'B', 'B'], 'a': [1, 2, 1, 3], 'b': ['L1', 'L2', 'L3', 'L4'] }) right = pd.DataFrame({ 'group': ['A', 'A', 'B', 'B'], 'a': [0, 2, 2, 4], 'c': ['R1', 'R2', 'R3', 'R4'] }) res = pd.merge_asof(left, right, on='a', by='group') print(res)

Результат выполнения кода:

group a b c 0 A 1 L1 R1 1 A 2 L2 R2 2 B 1 L3 NaN 3 B 3 L4 R4

Пример

Использование merge_asof с разными именами столбцов в левой и правой таблицах:

import pandas as pd left = pd.DataFrame({ 'left_key': [1, 2, 3, 4, 5], 'value_left': ['A', 'B', 'C', 'D', 'E'] }) right = pd.DataFrame({ 'right_key': [1, 3, 4, 6], 'value_right': ['X', 'Y', 'Z', 'W'] }) res = pd.merge_asof(left, right, left_on='left_key', right_on='right_key') print(res)

Результат выполнения кода:

left_key value_left right_key value_right 0 1 A 1.0 X 1 2 B 1.0 X 2 3 C 3.0 Y 3 4 D 4.0 Z 4 5 E 4.0 Z

Смотрите также

  • функция merge,
    которая выполняет стандартное слияние таблиц по точному совпадению ключей
  • функция concat,
    которая объединяет таблицы по индексам или осям
  • функция merge_ordered,
    которая выполняет упорядоченное слияние с интерполяцией данных
  • функция merge_asof,
    которая выполняет асимметричное слияние по ближайшим значениям
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить