Merge Asof

HardPython
05:00
Лучше работает на десктопе
Pandasmerge_asoftime-seriesjoins

Даны две таблицы (как словари):
- trades: time, price — сделки
- quotes: time, bid, ask — котировки

Для каждой сделки найдите последнюю котировку на момент или до сделки (merge_asof).

Верните список dict с ключами: time, price, bid, ask. Если котировки нет — bid и ask = None.

Сигнатура

def merge_asof_trades(trades: dict, quotes: dict) -> list[dict]:

Примеры

trades = {"time": ["2024-01-01 10:00:01","2024-01-01 10:00:03","2024-01-01 10:00:05"], "price": [100,102,101]}
quotes = {"time": ["2024-01-01 10:00:00","2024-01-01 10:00:02","2024-01-01 10:00:04"], "bid": [99,100,101], "ask": [101,102,103]}
merge_asof_trades(trades, quotes) → [
    {"time": "2024-01-01 10:00:01", "price": 100, "bid": 99, "ask": 101},
    {"time": "2024-01-01 10:00:03", "price": 102, "bid": 100, "ask": 102},
    {"time": "2024-01-01 10:00:05", "price": 101, "bid": 101, "ask": 103}
]

Примеры

Пример 1

Вход:
trades = {"time":["2024-01-01 10:00:01","2024-01-01 10:00:03","2024-01-01 10:00:05"],"price":[100,102,101]}
quotes = {"time":["2024-01-01 10:00:00","2024-01-01 10:00:02","2024-01-01 10:00:04"],"bid":[99,100,101],"ask":[101,102,103]}
Выход:[{"time":"2024-01-01 10:00:01","price":100,"bid":99,"ask":101},{"time":"2024-01-01 10:00:03","price":102,"bid":100,"ask":102},{"time":"2024-01-01 10:00:05","price":101,"bid":101,"ask":103}]

Пример 2

Вход:
trades = {"time":["2024-01-01 09:00:00","2024-01-01 09:00:05"],"price":[50,55]}
quotes = {"time":["2024-01-01 09:00:03"],"bid":[48],"ask":[52]}
Выход:[{"time":"2024-01-01 09:00:00","price":50,"bid":null,"ask":null},{"time":"2024-01-01 09:00:05","price":55,"bid":48,"ask":52}]
Консоль
Нажмите Run или Ctrl+Enter для запуска