Перейти к содержанию
Содержание

Повторные строки отчёта: отделите точный дубль от конфликта операции

В объединённой выгрузке повторяется номер операции. Удалять все лишние строки по этому номеру опасно: под одним ключом могут оказаться разные версии, позиции или операции разных магазинов. Сначала определите смысл повтора и сохраните спорные записи для сверки.

Определите зерно отчёта

Запишите, что означает одна строка: заказ, позиция заказа, платёж или событие изменения статуса. Затем выберите ключ, который должен однозначно определять именно такую строку. Номер заказа не обязан быть уникальным в отчёте по позициям.

Повторные строки отчёта: отделите точный дубль от конфликта операции

Добавьте к рабочей копии происхождение записи: файл и строку исходника. Сохраните исходные файлы без изменений, их период и время получения. Отдельно запишите контрольную сумму денежного поля, если оно действительно аддитивно на выбранном уровне. Итог по суммам заказа в каждой товарной строке для такой проверки не подходит.

Покажите все строки повторяющегося ключа

Согласно документации 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

0 / 1500

Популярные статьи