Задача курса

pandas dropduplicates: keep='first' и keep='last'

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

Проверьте, какая запись по ключу остаётся после дедупликации и почему порядок строк важен.

Условие

keep='first' vs keep='last': сравнение сохранённых значений после дедупликации

Что уже дано

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

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

Напишите программу, которая сравнивает результаты дедупликации с keep='first' и keep='last' на таблице измерений:

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит три токена через пробел: device (строка без пробелов), date (строка вида YYYY-MM-DD), reading (целое число). Создаёт pd.DataFrame с именем df и столбцами 'device', 'date', 'reading'.
  3. Шаг A. Применяет df.drop_duplicates(subset=['device', 'date'], keep='first'), сохраняет в df_first. Выводит first_rows=<n> — число строк результата.
  4. Шаг B. Применяет df.drop_duplicates(subset=['device', 'date'], keep='last'), сохраняет в df_last. Выводит last_rows=<n> — число строк результата.
  5. Шаг C. Проверяет уникальность обоих результатов. Выводит first_dups=<k> и last_dups=<k>, где k — результат df_first.duplicated(subset=['device', 'date']).sum() и аналогично для df_last.
  6. Шаг D. Для каждой пары (device, date), которая встречалась в исходном df более одного раза (в порядке первого появления в df_first по индексу), выводит одну строку вида <device> <date> first=<r1> last=<r2>, где r1 — значение 'reading' из df_first для этой пары, r2 — из df_last.

Ввод и вывод

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

Формат ввода

n
device1 date1 reading1
device2 date2 reading2
...

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

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

first_rows=<n>
last_rows=<n>
first_dups=<k>
last_dups=<k>
<device> <date> first=<r1> last=<r2>
...

Примеры

Пример 1

Ввод
7
S1 2024-01-01 10
S2 2024-01-01 20
S1 2024-01-01 11
S3 2024-01-02 30
S2 2024-01-01 21
S1 2024-01-03 12
S3 2024-01-02 31
Ожидаемый результат
first_rows=4
last_rows=4
first_dups=0
last_dups=0
S1 2024-01-01 first=10 last=11
S2 2024-01-01 first=20 last=21
S3 2024-01-02 first=30 last=31

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

РешениеPython
Без регистрации · результат не сохраняется
pandas dropduplicates: keep='first' и keep='last'