Слияние по ближайшему времени в Pandas
У сделок и котировок метки времени
редко совпадают до секунды. Функция
merge_asof для каждой строки
слева подбирает последнюю строку
справа, у которой время не позже.
Обе таблицы должны быть отсортированы
по этому столбцу.
Зададим ряд курсов и три сделки, затем выведем сопоставление:
import pandas as pd
quotes = pd.DataFrame({
'time': pd.to_datetime([
'2024-01-01 10:00',
'2024-01-01 10:05',
'2024-01-01 10:12',
]),
'rate': [1.10, 1.12, 1.11],
})
trades = pd.DataFrame({
'time': pd.to_datetime([
'2024-01-01 10:03',
'2024-01-01 10:08',
'2024-01-01 10:15',
]),
'amount': [100, 200, 150],
})
matched = pd.merge_asof(trades, quotes, on='time')
print(matched) # выведет time amount rate
# 0 2024-01-01 10:03:00 100 1.10
# 1 2024-01-01 10:08:00 200 1.12
# 2 2024-01-01 10:15:00 150 1.11
Сделка в 10:03 получила курс
10:00, в 10:08 - курс
10:05, в 10:15 - последний
доступный курс 10:12. Строки
сделок сохранили свой порядок.
Справочник температур по часам
9:00, 10:00, 11:00
и замеры в 9:40, 10:20,
11:05 в одном столбце времени.
К каждому замеру подставьте
последнюю температуру не позже
момента замера и выведите таблицу.
Слева три события с метками минут, справа пять отметок курса валюты по возрастанию времени. Получите для каждого события актуальный на тот момент курс и выведите результат.
Журнал посещений с тремя временами входа и таблица статусов двери с четырьмя отметками. Сопоставьте каждому входу последний статус на момент или раньше и выведите итог.