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

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

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

keep=False: диагностика всех участников дублей и итоговая дедупликация

Что уже дано

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

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

Напишите программу, которая работает с таблицей событий:

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит три токена через пробел: sensor (строка без пробелов), ts (строка вида YYYY-MM-DD), val (целое число). Создаёт pd.DataFrame с именем df и столбцами 'sensor', 'ts', 'val'.
  3. Шаг A. Строит маску mask_all = df.duplicated(subset=['sensor', 'ts'], keep=False) — помечает True все строки, участвующие в дублировании (включая первое вхождение). Выводит маску как строку из 0/1 через пробел (True1, False0).
  4. Шаг B. Выводит dup_count=<k>, где k = mask_all.sum() — общее число строк, помеченных True.
  5. Шаг C. Применяет df.drop_duplicates(subset=['sensor', 'ts'], keep='first'), сохраняет в df_first. Выводит first_shape=<shape> и first_unique=<u>, где <u> = df_first.duplicated(subset=['sensor', 'ts']).sum().
  6. Шаг D. Применяет df.drop_duplicates(subset=['sensor', 'ts'], keep='last'), сохраняет в df_last. Выводит last_shape=<shape> и last_unique=<u>, где <u> = df_last.duplicated(subset=['sensor', 'ts']).sum().
  7. Шаг E. Для каждой строки df_first (в порядке её индексов) выводит одну строку вида <sensor> <val>.

Ввод и вывод

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

Формат ввода

n
sensor1 ts1 val1
sensor2 ts2 val2
...

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

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

<маска 0/1 через пробел>
dup_count=<k>
first_shape=(<rows>, <cols>)
first_unique=<u>
last_shape=(<rows>, <cols>)
last_unique=<u>
<sensor> <val> (по одной строке для каждой строки df_first)
О данных в ответах

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    7
    S1 2024-01-01 11
    S2 2024-01-01 21
    S3 2024-01-02 31
    S1 2024-01-01 12
    S2 2024-01-01 22
    S3 2024-01-03 33
    S1 2024-01-03 13
    
    Ожидаемый вывод
    1 1 0 1 1 0 0
    dup_count=4
    first_shape=(5, 3)
    first_unique=0
    last_shape=(5, 3)
    last_unique=0
    S1 11
    S2 21
    S3 31
    S3 33
    S1 13
    
Решение
Как проверяется решение

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

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