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

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

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

Два ключа, четыре агрегата: groupby по region и channel с as_index=False

Что уже дано

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

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

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

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит четыре токена через пробел: region (строка без пробелов), channel (строка без пробелов), amount (целое число), orders (целое число). Пример строки: Север online 5000 10.
  3. Создаёт pd.DataFrame из словаря списков с ключами 'region', 'channel', 'amount', 'orders'.
  4. Группирует DataFrame по ['region', 'channel'] с as_index=False и вычисляет за один вызов agg четыре именованных агрегата:
  • total_amount=('amount', 'sum')
  • avg_amount=('amount', 'mean')
  • max_orders=('orders', 'max')
  • tx_count=('orders', 'count')

Сохраняет результат в переменную result.
5. Выводит в stdout:

  • строку columns=<список>list(result.columns) в виде Python-списка;
  • строку shape=<кортеж>result.shape;
  • для каждой строки result, отсортированной по 'region', затем по 'channel', выводит одну строку вида <region> <channel> <total_amount> <avg_amount> <max_orders> <tx_count>, где avg_amount округлён до двух знаков после запятой.

Ввод и вывод

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

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

Формат ввода

n
region1 channel1 amount1 orders1
region2 channel2 amount2 orders2
...

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

columns=['region', 'channel', 'total_amount', 'avg_amount', 'max_orders', 'tx_count']
shape=(<строк>, 6)
<region> <channel> <total_amount> <avg_amount> <max_orders> <tx_count>
...
О данных в ответах

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    6
    Север online 5000 10
    Север offline 3000 6
    Юг online 4000 8
    Юг offline 2000 4
    Север online 1000 2
    Юг online 500 1
    Ожидаемый вывод
    columns=['region', 'channel', 'total_amount', 'avg_amount', 'max_orders', 'tx_count']
    shape=(4, 6)
    Север offline 3000 3000.0 6 1
    Север online 6000 3000.0 10 2
    Юг offline 2000 2000.0 4 1
    Юг online 4500 2250.0 8 2
Решение
Как проверяется решение

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

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