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)
  • Тест 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 секунд.

Отправьте решение, чтобы увидеть результаты тестов.