pandas: типы столбцов и очистка по правилу

Дубли: duplicated и drop_duplicates по ключевым столбцам

Содержание курса

Найди и исправь: три ошибки в duplicated, drop_duplicates и проверке уникальности

Что уже дано

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

В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:

  1. mask строится через df.duplicated(subset=['product']) — проверяется только столбец 'product', хотя по условию дублем считается совпадение сразу по паре ('client_id', 'product').
  2. df_clean создаётся через df.drop_duplicates(subset=['client_id', 'product'], keep='last') — хотя по условию нужно сохранить первое вхождение каждой группы (keep='first').
  3. Проверка уникальности сделана через df_clean.duplicated(subset=['client_id']).sum() — проверяется только 'client_id', хотя уникальность нужно проверять по тому же ключу ['client_id', 'product'].

Каждая ошибка — в отдельной строке кода. Исправьте все три.

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

Исправьте три ошибки так, чтобы программа:

  1. Читала из stdin целое число n — количество строк таблицы.
  2. Читала следующие n строк; каждая содержит три токена через пробел: client_id (целое число), product (строка без пробелов), amount (целое число). Создавала pd.DataFrame с именем df и столбцами 'client_id', 'product', 'amount'.
  3. Строила маску mask = df.duplicated(subset=['client_id', 'product']) — по паре (client_id, product), keep='first' по умолчанию.
  4. Выводила dup_count=<k>, где k = mask.sum().
  5. Создавала df_clean = df.drop_duplicates(subset=['client_id', 'product'], keep='first').
  6. Выводила clean_shape=<shape> в виде (rows, cols).
  7. Проверяла uniq = df_clean.duplicated(subset=['client_id', 'product']).sum() и выводила uniq=<uniq>.
  8. Для каждой строки df_clean (в порядке исходного индекса) выводила одну строку вида <client_id> <product> <amount>.

Ввод и вывод

Программа читает stdin и пишет в stdout.

Формат ввода

n
client_id1 product1 amount1
client_id2 product2 amount2
...

Дополнительные ограничения: n >= 1; таблица содержит явно описанные в условии столбцы.

Формат вывода

dup_count=<k>
clean_shape=(<rows>, <cols>)
uniq=<uniq>
<client_id> <product> <amount>
...
О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

Проверяется тестами (1)
  • Тест 1
    Ввод
    7
    1 Стол 500
    2 Стул 300
    1 Диван 800
    1 Стол 550
    3 Шкаф 200
    2 Стул 320
    1 Диван 850
    
    Ожидаемый вывод
    dup_count=3
    clean_shape=(4, 3)
    uniq=0
    1 Стол 500
    2 Стул 300
    1 Диван 800
    3 Шкаф 200
    
Решение
Как проверяется решение

Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

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