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

melt, pivot_table и explode: широкий и длинный форматы

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

Сводная таблица продаж по отделам и кварталам: pivot_table с aggfunc, fill_value и reset_index

Что уже дано

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

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

Напишите программу, которая строит сводную таблицу продаж из длинного формата.

  1. Читает из stdin целое число n — количество строк таблицы (n >= 1).
  2. Читает следующие n строк; каждая содержит три токена через пробел: dept (строка без пробелов), quarter (строка вида Q1, Q2 и т.д.), amount (целое число). Пример строки: Alpha Q1 700.
  3. Строит pd.DataFrame из словаря списков с ключами 'dept', 'quarter', 'amount'.
  4. Строит сводную таблицу через pd.pivot_table с параметрами:
  • index='dept'
  • columns='quarter'
  • values='amount'
  • aggfunc='sum' — явно, так как одна пара (dept, quarter) может встречаться несколько раз
  • fill_value=0 — заполнить отсутствующие комбинации нулём
  1. Сохраняет результат в pt. Вызывает pt.reset_index(), сохраняет в pt_flat. Убирает имя оси столбцов: pt_flat.columns.name = None.
  2. Выводит строку: shape=<shape> — форму pt_flat в виде (строк, столбцов), например shape=(3, 3).
  3. Выводит строку: columns=<список> — список столбцов pt_flat в виде Python-списка, например columns=['dept', 'Q1', 'Q2']. Порядок столбцов — 'dept', затем столбцы кварталов в алфавитном порядке (pandas сортирует их автоматически).
  4. Для каждой строки pt_flat (в порядке строк) выводит одну строку вида: <dept> total=<сумма всех кварталов>. Сумму вычисляйте как сумму всех числовых столбцов pt_flat (то есть всех столбцов, кроме 'dept').

Ввод и вывод

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

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

Формат ввода

n
dept1 quarter1 amount1
...
deptN quarterN amountN

Гарантируется: n >= 1; все значения dept и quarter — строки без пробелов; amount — целое число.

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

shape=(<строк>, <столбцов>)
columns=[...]
<dept1> total=<число>
...
О данных в ответах

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    6
    Alpha Q1 1000
    Beta Q1 500
    Gamma Q2 400
    Alpha Q2 300
    Alpha Q1 700
    Gamma Q1 0
    
    Ожидаемый вывод
    shape=(3, 3)
    columns=['dept', 'Q1', 'Q2']
    Alpha total=2000
    Beta total=500
    Gamma total=400
    
Решение
Как проверяется решение

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

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