pandas: группировки, соединения и упорядоченные показатели

groupby и agg: сводные показатели с явными именами агрегатов

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

Пайплайн: groupby + agg + rename + sort, затем группировка по двум ключам

Что уже дано

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

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

Напишите программу, которая:

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит четыре токена через пробел: month (строка без пробелов), category (строка без пробелов), amount (целое число), transactions (целое число). Пример строки: Jan Food 1200 12.
  3. Создаёт pd.DataFrame из словаря списков с ключами 'month', 'category', 'amount', 'transactions'.
  4. Шаг A. Группирует DataFrame по 'month' с as_index=False и вычисляет за один вызов agg три именованных агрегата: month_total=('amount', 'sum'), month_avg=('amount', 'mean'), month_tx=('transactions', 'sum'). Сохраняет в monthly.
  5. Шаг B. Переименовывает столбец 'month_total' в 'total' через rename(columns=...) и сохраняет результат обратно в monthly.
  6. Шаг C. Сортирует monthly по 'total' по возрастанию через sort_values. Выводит строку monthly_columns=<список>list(monthly.columns), затем для каждой строки отсортированного monthly выводит одну строку вида <month> <total> <round(month_avg, 1)> <month_tx>.
  7. Шаг D. Группирует исходный DataFrame по ['month', 'category'] с as_index=False и вычисляет cat_total=('amount', 'sum'). Сохраняет в by_cat. Сортирует by_cat по 'month', затем по 'category'. Выводит строку by_cat_columns=<список>, затем для каждой строки выводит <month> <category> <cat_total>.

Ввод и вывод

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

Ограничения: n >= 1.

Формат ввода

n
month1 category1 amount1 transactions1
month2 category2 amount2 transactions2
...

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

monthly_columns=['month', 'total', 'month_avg', 'month_tx']
<month> <total> <month_avg> <month_tx>
...
by_cat_columns=['month', 'category', 'cat_total']
<month> <category> <cat_total>
...
О данных в ответах

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    8
    Jan Food 1200 12
    Jan Tech 3500 5
    Feb Food 900 9
    Feb Tech 4200 6
    Jan Food 800 8
    Feb Food 650 7
    Jan Tech 2000 3
    Feb Tech 1500 4
    Ожидаемый вывод
    monthly_columns=['month', 'total', 'month_avg', 'month_tx']
    Feb 7250 1812.5 26
    Jan 7500 1875.0 28
    by_cat_columns=['month', 'category', 'cat_total']
    Feb Food 1550
    Feb Tech 5700
    Jan Food 2000
    Jan Tech 5500
Решение
Как проверяется решение

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

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