Думали ли вы об использовании для этого базы данных временных рядов? Это могло бы облегчить вашу жизнь, если бы вы выполняли много агрегатов на основе событий с произвольными временными интервалами. Базы данных временных рядов абстрагируют это для вас, поэтому все, что вам нужно, это отправить запрос и получить результаты в pandas. Он также будет работать значительно быстрее.
Например, почасовое агрегирование может быть выполнено с использованием следующего синтаксиса в QuestDB.
select timestamp, country, count() from yourTable SAMPLE BY 1h
это вернет такие результаты
| timestamp | country | count |
| 2020-06-22T00:00:00 | X | 234 |
| 2020-06-22T00:00:00 | Y | 493 |
| 2020-06-22T01:00:00 | X | 12 |
| 2020-06-22T01:00:00 | Y | 66 |
Вы можете настроить это на ежемесячные, еженедельные или 5-минутные результаты разрешения без необходимости переписывать логи c, все, что вам нужно сделать, это изменить 1h
на 1M
, 7d
или 5m
или передайте это как аргумент.
Теперь, чтобы получить результаты за час до и после отметки времени вашей целевой транзакции, вы можете добавить поиск интервала временной отметки к вышеуказанному. Например, если ваша целевая транзакция произошла на 2010-01-01T06:47:00.000000Z
, результат поиска будет
select hour, country, count() from yourTable
where timestamp = '2010-01-01T05:47:00.000000Z;2h'
sample by 1h;
. Если это что-то, что вам подойдет, есть руководство о том, как запустить этот тип запроса в QuestDB. и получите результат в pandas здесь