Дубли: duplicated и drop_duplicates по ключевым столбцам
Содержание курса
keep=False: диагностика всех участников дублей и итоговая дедупликация
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая работает с таблицей событий:
- Читает из
stdinцелое числоn— количество строк таблицы. - Читает следующие
nстрок; каждая содержит три токена через пробел:sensor(строка без пробелов),ts(строка видаYYYY-MM-DD),val(целое число). Создаётpd.DataFrameс именемdfи столбцами'sensor','ts','val'. - Шаг A. Строит маску
mask_all = df.duplicated(subset=['sensor', 'ts'], keep=False)— помечает True все строки, участвующие в дублировании (включая первое вхождение). Выводит маску как строку из0/1через пробел (True→1,False→0). - Шаг B. Выводит
dup_count=<k>, гдеk = mask_all.sum()— общее число строк, помеченных True. - Шаг 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(). - Шаг 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(). - Шаг 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 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
