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

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

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

Журнал сессий: парсинг, .dt-компоненты, длительность в минутах и фильтрация по диапазону

Что уже дано

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

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

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

  1. Читает из stdin целое число n — количество строк журнала.
  2. Читает следующие n строк; каждая содержит пять токенов через пробел: session_id, дату входа, время входа, дату выхода и время выхода. Пример строки: 1 2024-01-15 08:00 2024-01-15 09:30.

Внимание: каждая строка содержит ровно пять токенов: session_id, дату входа, время входа, дату выхода и время выхода. Читайте строку целиком через input() и разбивайте по пробелам: токены [1] и [2] объедините через пробел — это login; токены [3] и [4] объедините через пробел — это logout.

  1. Создаёт pd.DataFrame с именем df со столбцами 'session_id' (int), 'login' (str), 'logout' (str).
  2. Преобразует столбцы 'login' и 'logout' в datetime64[ns] через pd.to_datetime.
  3. Создаёт столбец 'login_hour' через df['login'].dt.hour и столбец 'login_weekday' через df['login'].dt.dayofweek.
  4. Вычисляет столбец 'duration_min' — длительность сессии в минутах как (df['logout'] - df['login']).dt.total_seconds() / 60.
  5. Читает из stdin строку с двумя токенами через пробел: date_from и date_to — границы временного интервала (строки вида YYYY-MM-DD).
  6. Фильтрует строки, где login >= date_from и login < date_to, через df.loc[mask]. Сохраняет результат в filtered.
  7. Выводит в stdout ровно len(filtered) + 2 строк:
  • Строки 1…len(filtered): для каждой строки filtered (в порядке исходного DataFrame) одну строку вида <session_id> <login_hour> <login_weekday> <duration_min>, где duration_min — целое число (используйте int(...)).
  • Предпоследняя строка: count=<len(filtered)>.
  • Последняя строка: max_duration=<значение>, где значение — максимальная duration_min среди отфильтрованных строк, целое число; если filtered пуст — выведите max_duration=0.

Ввод и вывод

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

Формат ввода

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

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

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

<session_id> <login_hour> <login_weekday> <duration_min>
...
count=<k>
max_duration=<m>
О данных в ответах

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    6
    1 2024-01-15 08:00 2024-01-15 09:30
    2 2024-02-20 22:00 2024-02-20 23:30
    3 2024-03-10 09:30 2024-03-10 12:30
    4 2024-03-25 11:00 2024-03-25 11:45
    5 2024-04-05 07:00 2024-04-05 09:00
    6 2024-05-01 15:00 2024-05-01 16:30
    2024-02-01 2024-04-01
    Ожидаемый вывод
    2 22 1 90
    3 9 6 180
    4 11 0 45
    count=3
    max_duration=180
Решение
Как проверяется решение

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

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

Временные столбцы: парсинг, .dt-компоненты, длительности и фильтрация — NumPy и pandas: практический тренажёр — Latorn