Необходимо удалить сторно и сторнирующие продажи

Рейтинг: 1Ответов: 1Опубликовано: 28.02.2023

введите сюда описание изображенияДана таблица продаж сопутствующих товаров на разных АЗС объемом 713745 строк. Необходимо удалить "минусовые" чеки и продажи, которые они отменяют (номера чеков разные).

Условия:

  1. за день может быть несколько одинаковых продаж (товар, магазин, кол-во, сумма продаж и т.п.). Поэтому через удаление дубликатов не получится.

  2. строка с минусовым чеком не обязательно следует за соответствующей продажей. Я хотела вычислить по индексу строки, подлежащие удалению (составить список индексов минусовых чеков, отнять от каждого значения единицу и получить список индексов строк, подлежащих удалению).

Часть датасета для понимания структуры и тренировки можно посмотреть здесь:

https://docs.google.com/spreadsheets/d/1gPHbUQTGVAfUGOeEQbAgCGRlgnXoHZ4v/edit?usp=sharing&ouid=107408597853648006127&rtpof=true&sd=true

Заранее благодарю!!!

Ответы

▲ 1

Всем добрый день! Еще раз благодарна за отклик.

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

  1. Разбила исходный датафрейм на 2: продажи и возвраты
  2. Преобразовала отрицательные значения в датафрейме с возвратами
  3. Изменила названия столбцов time и receipt в датафрейме с возвратами, чтобы они не участвовали в pd.merge
  4. Присоединила продажи к возвратам (how = left)
  5. Оставила строки, в которых время возврата больше времени продажи
  6. Удалила дубликаты по необходимым столбцам, оставив последний (keep = 'last')
  7. Привела структуру получившегося датафрейма в соответствии со структурой по продажам
  8. Присоединила к продажам: sales = sales.append(storno1, ignore_index=True)
  9. Удалила дубликаты (keep = False)

Ссылка на ноутбук: https://drive.google.com/file/d/1UCxUm4i2uPlrcgiRLeDq0rCwyyM1RePe/view?usp=sharing

Ссылка на тестовые данные: https://drive.google.com/file/d/1hRZZ7EBhyVsbLvy4x5fva7ZtkUCvl1bt/view?usp=sharing