Дубли: duplicated и drop_duplicates по ключевым столбцам
Содержание курса
Карантин дублей: keep=False, подсчёт удалённых строк и список выживших ключей
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая диагностирует дубли в таблице транзакций и отправляет все строки с дублирующимся бизнес-ключом в «карантин»:
- Читает из
stdinцелое числоn— количество строк таблицы. - Читает следующие
nстрок; каждая содержит три токена через пробел:client_id(целое число),product(строка без пробелов),amount(целое число). Создаётpd.DataFrameс именемdfи столбцами'client_id','product','amount'. - Шаг A. Строит маску
mask_all = df.duplicated(subset=['client_id', 'product'], keep=False)— помечаетTrueвсе строки, у которых есть хотя бы один дубль по паре(client_id, product), включая первое вхождение. Выводит одну строку:quarantine_count=<k>, гдеk = mask_all.sum(). - Шаг B. Формирует
df_quarantine = df[mask_all]— DataFrame со всеми строками-дублями. Выводитquarantine_shape=<shape>в виде(rows, cols). - Шаг C. Формирует
df_clean = df[~mask_all]— DataFrame из строк, у которых нет ни одного дубля по бизнес-ключу. Выводитclean_count=<m>, гдеm = df_clean.shape[0], иremoved_count=<r>, гдеr = df.shape[0] - df_clean.shape[0]. - Шаг D. Проверяет, что в
df_cleanнет дублей по['client_id', 'product']. Выводитclean_unique=<u>, гдеu = df_clean.duplicated(subset=['client_id', 'product']).sum(). - Шаг E. Для каждой строки
df_clean(в порядке исходного индекса) выводит одну строку вида<client_id> <product>.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
n client_id1 product1 amount1 client_id2 product2 amount2 ...
Дополнительные ограничения: n >= 1; таблица содержит явно описанные в условии столбцы.
Формат вывода
quarantine_count=<k>
quarantine_shape=(<rows>, <cols>)
clean_count=<m>
removed_count=<r>
clean_unique=<u>
<client_id> <product>
...
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
7 1 Стол 500 2 Стул 300 1 Стол 550 3 Шкаф 200 2 Стул 320 4 Диван 800 1 Диван 100
Ожидаемый выводquarantine_count=4 quarantine_shape=(4, 3) clean_count=3 removed_count=4 clean_unique=0 3 Шкаф 4 Диван 1 Диван
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
