Задача курса

pandas groupby и agg: сводка по двум ключам

Курс «NumPy и 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

Ввод
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

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется