Функция merge_ordered
Функция merge_ordered в модуле Pandas выполняет объединение двух таблиц DataFrame с сохранением порядка сортировки по ключевым столбцам. В отличие от обычного merge, эта функция предназначена для работы с временными рядами и другими упорядоченными данными. Она позволяет заполнять пропуски значениями с помощью параметра fill_method, что особенно полезно при работе с пропущенными значениями в отсортированных наборах данных.
Основные параметры функции:
-
leftиright- таблицыDataFrameдля объединения -
on- столбец или список столбцов для объединения (если не указан, используется пересечение имён столбцов) -
left_onиright_on- столбцы для объединения из левой и правой таблицы соответственно -
left_byиright_by- столбцы для группировки перед объединением -
fill_method- метод заполнения пропусков ('ffill', 'bfill' или None) -
suffixes- суффиксы для одноимённых столбцов (по умолчанию ('_x', '_y')) -
how- тип объединения ('left', 'right', 'outer', 'inner'; по умолчанию 'outer')
Синтаксис
pd.merge_ordered(left, right, on=None, left_on=None, right_on=None,
left_by=None, right_by=None, fill_method=None, suffixes=('_x', '_y'),
how='outer')
Пример
Выполним простое упорядоченное объединение двух таблиц с общим столбцом:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4],
'b': [10, 20, 30, 40]
})
df2 = pd.DataFrame({
'a': [2, 3, 5, 6],
'c': [100, 200, 300, 400]
})
res = pd.merge_ordered(df1, df2, on='a')
print(res)
Результат выполнения кода:
a b c
0 1 10.0 NaN
1 2 20.0 100.0
2 3 30.0 200.0
3 4 40.0 NaN
4 5 NaN 300.0
5 6 NaN 400.0
Пример
Используем метод заполнения пропусков ffill для заполнения отсутствующих значений:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 4],
'b': [10, 20, 30, 40]
})
df2 = pd.DataFrame({
'a': [2, 3, 5, 6],
'c': [100, 200, 300, 400]
})
res = pd.merge_ordered(df1, df2, on='a', fill_method='ffill')
print(res)
Результат выполнения кода:
a b c
0 1 10.0 NaN
1 2 20.0 100.0
2 3 30.0 200.0
3 4 40.0 200.0
4 5 40.0 300.0
5 6 40.0 400.0
Пример
Объединим таблицы с разными именами ключевых столбцов, используя left_on и right_on:
import pandas as pd
df1 = pd.DataFrame({
'key_left': [1, 2, 3, 4],
'b': [10, 20, 30, 40]
})
df2 = pd.DataFrame({
'key_right': [2, 3, 5, 6],
'c': [100, 200, 300, 400]
})
res = pd.merge_ordered(df1, df2,
left_on='key_left', right_on='key_right',
fill_method='bfill')
print(res)
Результат выполнения кода:
key_left b key_right c
0 1 10.0 NaN NaN
1 2 20.0 2.0 100.0
2 3 30.0 3.0 200.0
3 4 40.0 NaN 300.0
4 5 NaN 5.0 300.0
5 6 NaN 6.0 400.0
Пример
Выполним объединение с группировкой по дополнительным столбцам с помощью параметра left_by:
import pandas as pd
df1 = pd.DataFrame({
'a': [1, 2, 3, 1, 2, 3],
'group': ['x', 'x', 'x', 'y', 'y', 'y'],
'b': [10, 20, 30, 40, 50, 60]
})
df2 = pd.DataFrame({
'a': [2, 3, 1, 2, 3],
'group': ['x', 'x', 'y', 'y', 'y'],
'c': [100, 200, 300, 400, 500]
})
res = pd.merge_ordered(df1, df2, on='a', left_by='group', fill_method='ffill')
print(res)
Результат выполнения кода:
a group b c
0 1 x 10.0 NaN
1 2 x 20.0 100.0
2 3 x 30.0 200.0
3 1 y 40.0 300.0
4 2 y 50.0 400.0
5 3 y 60.0 500.0
Смотрите также
-
функция
merge,
которая выполняет стандартное объединение таблиц -
функция
merge_asof,
которая выполняет объединение по ближайшим значениям -
функция
concat,
которая объединяет таблицы по индексам или строкам -
метод
merge_ordered,
который выполняет упорядоченное объединение с возможностью заполнения пропусков