Необходимо удалить сторно и сторнирующие продажи
Дана таблица продаж сопутствующих товаров на разных АЗС объемом 713745 строк.
Необходимо удалить "минусовые" чеки и продажи, которые они отменяют (номера чеков разные).
Условия:
за день может быть несколько одинаковых продаж (товар, магазин, кол-во, сумма продаж и т.п.). Поэтому через удаление дубликатов не получится.
строка с минусовым чеком не обязательно следует за соответствующей продажей. Я хотела вычислить по индексу строки, подлежащие удалению (составить список индексов минусовых чеков, отнять от каждого значения единицу и получить список индексов строк, подлежащих удалению).
Часть датасета для понимания структуры и тренировки можно посмотреть здесь:
Заранее благодарю!!!
Ответы (1 шт):
Всем добрый день! Еще раз благодарна за отклик.
Решила свою задачу через merge. Получилось пусть не очень изящно, но результат нужный. Структуру тестового файла изменила, добавив столбец с временем чека.
- Разбила исходный датафрейм на 2: продажи и возвраты
- Преобразовала отрицательные значения в датафрейме с возвратами
- Изменила названия столбцов time и receipt в датафрейме с возвратами, чтобы они не участвовали в pd.merge
- Присоединила продажи к возвратам (how = left)
- Оставила строки, в которых время возврата больше времени продажи
- Удалила дубликаты по необходимым столбцам, оставив последний (keep = 'last')
- Привела структуру получившегося датафрейма в соответствии со структурой по продажам
- Присоединила к продажам: sales = sales.append(storno1, ignore_index=True)
- Удалила дубликаты (keep = False)
Ссылка на ноутбук: https://drive.google.com/file/d/1UCxUm4i2uPlrcgiRLeDq0rCwyyM1RePe/view?usp=sharing
Ссылка на тестовые данные: https://drive.google.com/file/d/1hRZZ7EBhyVsbLvy4x5fva7ZtkUCvl1bt/view?usp=sharing