Содержание
Повторные строки отчёта: отделите точный дубль от конфликта операции
В объединённой выгрузке повторяется номер операции. Удалять все лишние строки по этому номеру опасно: под одним ключом могут оказаться разные версии, позиции или операции разных магазинов. Сначала определите смысл повтора и сохраните спорные записи для сверки.
Определите зерно отчёта
Запишите, что означает одна строка: заказ, позиция заказа, платёж или событие изменения статуса. Затем выберите ключ, который должен однозначно определять именно такую строку. Номер заказа не обязан быть уникальным в отчёте по позициям.
Добавьте к рабочей копии происхождение записи: файл и строку исходника. Сохраните исходные файлы без изменений, их период и время получения. Отдельно запишите контрольную сумму денежного поля, если оно действительно аддитивно на выбранном уровне. Итог по суммам заказа в каждой товарной строке для такой проверки не подходит.
Покажите все строки повторяющегося ключа
Согласно документации pandas, duplicated позволяет выбрать колонки сравнения через subset. При keep=False отмечаются все участники повтора; обычный режим оставляет первое вхождение неотмеченным.
Для разбора удобно видеть всю группу. Код ниже рассчитан на вашу таблицу data, где после проверки структуры операции ключом выбраны shop_id и operation_id. Это условные имена колонок, которые нужно заменить на реальные; для отчёта по позициям ключ потребуется расширить.
keys = ["shop_id", "operation_id"]
if not set(keys).issubset(data.columns):
raise ValueError("В таблице отсутствуют колонки ключа")
missing_key = data[keys].isna().any(axis=1)
exceptions = data.loc[missing_key].copy()
valid = data.loc[~missing_key].copy()
repeated = valid.loc[valid.duplicated(subset=keys, keep=False)]
repeated = repeated.sort_values(keys)
Пустые идентификаторы вынесены отдельно. Перед расчётом проверьте также пустые строки и пробелы: isna() не считает их пропуском. Не преобразуйте строковые идентификаторы в числа ради поиска повторов, если значимы ведущие нули.
Разделите повторы по причине
| Наблюдение | Что проверить до изменения отчёта |
|---|---|
| Совпадают ключ и все значимые поля | Не загружен ли один файл дважды |
| Ключ один, но суммы или статусы различаются | Есть ли версии записи и правило актуальности |
| Различаются товары или магазины | Полон ли выбранный ключ |
| Часть ключа пустая | Можно ли восстановить идентификатор из источника |
Точное совпадение полей тоже не даёт автоматического разрешения на удаление. Две самостоятельные операции могут иметь одинаковые реквизиты при неполном ключе. Если есть версии, получите документированное правило выбора: время выгрузки само по себе не всегда означает время изменения операции.
Для каждой спорной группы сохраните исходные строки, причину и решение ответственного. До согласования исключений не используйте очищенную таблицу для окончательной сверки расчётов с площадкой.
Проверьте итог после согласованной обработки
Сравните число строк и суммы до и после, объяснив каждое изменение перечнем обработанных групп. Проверьте, что независимые операции сохранились, а нерешённые конфликты остались в отдельном списке. Запишите правило обработки так, чтобы следующая выгрузка дала воспроизводимый результат.
Если повторы появились уже после объединения двух разных таблиц, отдельно проверьте связь между ними. Это другой этап контроля: соединение со справочником может размножить продажи. Поиск повторных исходных операций и проверка соединения должны оставлять собственные списки исключений.
Комментарии 0