Задача курса

pandas duplicated keep=False: найти все дубли ключа

Курс «NumPy и pandas: практический тренажёр» · урок «Дубли: duplicated и drop_duplicates по ключевым столбцам»

Условие

Карантин дублей: keep=False, подсчёт удалённых строк и список выживших ключей

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая диагностирует дубли в таблице транзакций и отправляет все строки с дублирующимся бизнес-ключом в «карантин»:

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит три токена через пробел: client_id (целое число), product (строка без пробелов), amount (целое число). Создаёт pd.DataFrame с именем df и столбцами 'client_id', 'product', 'amount'.
  3. Шаг A. Строит маску mask_all = df.duplicated(subset=['client_id', 'product'], keep=False) — помечает True все строки, у которых есть хотя бы один дубль по паре (client_id, product), включая первое вхождение. Выводит одну строку: quarantine_count=<k>, где k = mask_all.sum().
  4. Шаг B. Формирует df_quarantine = df[mask_all] — DataFrame со всеми строками-дублями. Выводит quarantine_shape=<shape> в виде (rows, cols).
  5. Шаг 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].
  6. Шаг D. Проверяет, что в df_clean нет дублей по ['client_id', 'product']. Выводит clean_unique=<u>, где u = df_clean.duplicated(subset=['client_id', 'product']).sum().
  7. Шаг 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 Диван

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется