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

Временные столбцы: парсинг, .dt-компоненты, длительности и фильтрация

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

Бронирование переговорных: длительность в часах и фильтрация по дате

Что уже дано

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

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

Напишите программу, которая обрабатывает журнал бронирования переговорных комнат:

  1. Читает из stdin целое число n — количество записей.
  2. Читает следующие n строк. Каждая строка содержит пять токенов через пробел:
  • booking_id (целое число)
  • дата начала YYYY-MM-DD
  • время начала HH:MM
  • дата конца YYYY-MM-DD
  • время конца HH:MM

Объедините токены [1] и [2] через пробел — это строка start; токены [3] и [4] — строка end.

  1. Создаёт pd.DataFrame с именем df со столбцами 'booking_id' (int), 'start' (str), 'end' (str).
  2. Преобразует оба строковых столбца в datetime64[ns] через pd.to_datetime.
  3. Создаёт столбец 'start_day' через df['start'].dt.day, столбец 'start_hour' через df['start'].dt.hour.
  4. Вычисляет столбец 'duration_h' — длительность бронирования в часах как (df['end'] - df['start']).dt.total_seconds() / 3600. Значения могут быть дробными.
  5. Читает из stdin строку с двумя токенами через пробел: date_from и date_to — границы фильтрации (строки вида YYYY-MM-DD).
  6. Фильтрует строки, где start >= date_from и start < date_to, через df.loc[mask]. Сохраняет результат в filtered.
  7. Выводит в stdout ровно len(filtered) + 2 строк:
  • Строки 1…len(filtered): для каждой строки filtered (в порядке исходного DataFrame) одну строку вида <booking_id> <start_day> <start_hour> <duration_h>, где duration_h округлён до 2 знаков после запятой.
  • Предпоследняя строка: count=<len(filtered)>.
  • Последняя строка: total_hours=<значение> — сумма duration_h по отфильтрованным строкам, округлённая до 2 знаков; если filtered пуст — выведите total_hours=0.00.

Ввод и вывод

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

Формат ввода

n
booking_id YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM
...
date_from date_to

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

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

<booking_id> <start_day> <start_hour> <duration_h>
...
count=<k>
total_hours=<s>
О данных в ответах

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    5
    1 2024-01-10 09:00 2024-01-10 11:30
    2 2024-02-20 14:00 2024-02-20 16:00
    3 2024-03-05 08:30 2024-03-05 10:00
    4 2024-03-18 13:00 2024-03-18 14:30
    5 2024-04-02 10:00 2024-04-02 12:00
    2024-02-01 2024-04-01
    Ожидаемый вывод
    2 20 14 2.00
    3 5 8 1.50
    4 18 13 1.50
    count=3
    total_hours=5.00
Решение
Как проверяется решение

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

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