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

Остатки не разворачиваются через pivot: найдите повторные пары

В аналитической копии остатков нужно получить строки по SKU и колонки по складам, но pandas сообщает: «Index contains duplicate entries, cannot reshape». Прежде чем заменять операцию на суммирование, выясните, что означает одна строка исходного файла.

Зафиксируйте срез и ключ

Подготовьте таблицу stocks с полями sku, warehouse и qty. Названия условные: замените их на свои. Оставьте один магазин и один момент снимка. Не смешивайте вчерашние и сегодняшние остатки, разные единицы измерения или доступный остаток с физическим. Сохраните исходную выгрузку отдельно.

Остатки не разворачиваются через pivot: найдите повторные пары

По документации pandas, pivot меняет форму таблицы без агрегирования. Повторная комбинация значений индекса и будущих колонок вызывает ValueError. Для нашей задачи это пара sku и warehouse.

Выведите все конфликтующие строки

keys = ["sku", "warehouse"]
if stocks[keys].isna().any().any():
    raise ValueError("Сначала разберите пустые SKU и склады")
conflicts = stocks.loc[
    stocks.duplicated(keys, keep=False)
].sort_values(keys)
conflicts.to_csv("stock_conflicts.csv", index=False)

Откройте сохранённые строки вместе с датой снимка, номером партии и видом остатка, если они есть в исходнике. Пустой файл конфликтов подтверждает уникальность выбранных пар, но сам по себе не подтверждает правильность количеств.

Выберите действие по смыслу строки

Что обнаружилиСледующее действие
Разные моменты снимкаВыберите один согласованный срез, не складывайте снимки
Несколько магазинов с одинаковыми обозначениями SKUОтберите магазин либо включите его в ключ
Независимые партии одного товараРешите, нужен ли отчёт по партиям или согласованный суммарный остаток
Повторная загрузка одной записиУстраните причину дубля и сформируйте чистую копию

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

Повторите разворот и сверьте результат

Когда в stocks осталась ровно одна запись на пару, выполните:

assert not stocks.duplicated(keys).any()
wide = stocks.pivot(index="sku", columns="warehouse", values="qty")

Возьмите несколько реальных пар из разных складов и сопоставьте их значения до и после разворота. Отдельно проверьте товар, который был в конфликтном файле. Пустую ячейку не заменяйте нулём автоматически: отсутствие записи требует своего правила учёта.

Сохраните матрицу вместе с моментом снимка, магазином и решением по каждой группе конфликтов. Результат готов для сравнения складов, когда можно восстановить происхождение значения каждой выбранной ячейки. Это аналитическая проверка файла, а не команда обновления остатков на площадке.

Теги

Комментарии 0

0 / 1500

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