Временные столбцы: парсинг, .dt-компоненты, длительности и фильтрация
Содержание курса
Журнал сессий: парсинг, .dt-компоненты, длительность в минутах и фильтрация по диапазону
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая обрабатывает журнал пользовательских сессий:
- Читает из
stdinцелое числоn— количество строк журнала. - Читает следующие
nстрок; каждая содержит пять токенов через пробел:session_id, дату входа, время входа, дату выхода и время выхода. Пример строки:1 2024-01-15 08:00 2024-01-15 09:30.
Внимание: каждая строка содержит ровно пять токенов:
session_id, дату входа, время входа, дату выхода и время выхода. Читайте строку целиком черезinput()и разбивайте по пробелам: токены[1]и[2]объедините через пробел — этоlogin; токены[3]и[4]объедините через пробел — этоlogout.
- Создаёт
pd.DataFrameс именемdfсо столбцами'session_id'(int),'login'(str),'logout'(str). - Преобразует столбцы
'login'и'logout'вdatetime64[ns]черезpd.to_datetime. - Создаёт столбец
'login_hour'черезdf['login'].dt.hourи столбец'login_weekday'черезdf['login'].dt.dayofweek. - Вычисляет столбец
'duration_min'— длительность сессии в минутах как(df['logout'] - df['login']).dt.total_seconds() / 60. - Читает из
stdinстроку с двумя токенами через пробел:date_fromиdate_to— границы временного интервала (строки видаYYYY-MM-DD). - Фильтрует строки, где
login >= date_fromиlogin < date_to, черезdf.loc[mask]. Сохраняет результат вfiltered. - Выводит в
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Ввод
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 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
