Что делать, если в списках совпадают точки по таймштампу?
Что проверяют
Отличаете ли вы дубликат от законного одновременного события. Совпадение по времени само по себе не значит ничего: у двух датчиков, двух складов или двух источников одинаковая метка времени это норма, и ответ «удалить дубли» без вопроса про ключ уже ошибка.
Как отвечать
Сначала назовите ключ. Ключ ряда почти никогда не одно время: это время плюс идентификатор объекта и, если данные приходят из разных мест, источник. Дальше решение зависит от того, что нашлось:
- полные повторы по ключу: убрать, зафиксировав правило выбора (последняя по времени загрузки запись, наибольшая версия);
- разные значения при одном ключе: это конфликт, его нельзя молча усреднять. Либо есть правило приоритета источников, либо запись помечается и уходит в разбор;
- законные одновременные события: ключ расширяется, а вместо схлопывания делается агрегация с явной функцией (сумма для событий, последнее значение для состояния);
- приведение к нужной частоте: сначала общая сетка времени и единый часовой пояс, потом расчёт.
Отдельно про воспроизводимость: перед выбором «последней» записи нужна сортировка по полю, а не надежда на порядок чтения. В распределённом хранилище порядок строк не гарантирован.
df.sort_values(["ts", "loaded_at"]).drop_duplicates(["ts", "object_id"], keep="last")Где спотыкаются
Усредняют всё подряд. Для суммируемых величин среднее занижает итог, а для состояния даёт значение, которого не было ни в одной записи.
Второе: соединяют два ряда по времени, не убрав дубли. Совпадение по ключу размножает строки, таблица после соединения растёт, а метрики тихо удваиваются.
Третье: путают одинаковое время и одинаковый момент. Наивное локальное время повторяется при переводе часов, а округление до секунды склеивает разные события, различавшиеся миллисекундами.