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

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

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

Продажи по кварталам: melt → pivot_table → explode за один проход

Что уже дано

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

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

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

Шаг 1. Чтение и melt.

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит четыре токена через пробел: region (строка без пробелов), q1 (целое число), q2 (целое число), q3 (целое число). Пример строки: Север 100 200 150.
  3. Строит pd.DataFrame из словаря списков с ключами 'region', 'q1', 'q2', 'q3'.
  4. Вызывает pd.melt с параметрами:
  • id_vars=['region']
  • value_vars=['q1', 'q2', 'q3']
  • var_name='quarter'
  • value_name='sales'

Сохраняет результат в df_long.
5. Выводит строку: melt shape=<shape> — например, melt shape=(9, 3).

Шаг 2. pivot_table.

  1. Строит сводную таблицу из df_long:
  • index='region'
  • columns='quarter'
  • values='sales'
  • aggfunc='sum'
  • fill_value=0

Сохраняет в pt.
7. Вызывает pt.reset_index() и сохраняет в pt_flat. Убирает имя оси столбцов: pt_flat.columns.name = None.
8. Выводит строку: pivot columns=<список> — список столбцов pt_flat в виде Python-списка, например pivot columns=['region', 'q1', 'q2', 'q3'].
9. Выводит суммарные продажи по каждому региону через pt_flat: для каждой строки pt_flat (в порядке строк) выводит одну строку вида <region> total=<сумма q1+q2+q3>.

Шаг 3. explode.

  1. Строит pd.DataFrame с двумя столбцами:
  • 'region' — список уникальных регионов из исходного DataFrame (в порядке первого появления, без дублей).
  • 'quarters' — для каждого региона список ['q1', 'q2', 'q3'] (одинаковый для всех).
  1. Вызывает .explode('quarters').reset_index(drop=True) и сохраняет в df_ex.
  2. Выводит строку: explode shape=<shape> — например, explode shape=(9, 2).
  3. Выводит все строки df_ex в формате <region> <quarter> — по одной строке на каждую запись df_ex.

Ввод и вывод

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

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

Формат ввода

n
region1 q1_1 q2_1 q3_1
...
regionN q1_N q2_N q3_N

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

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

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    3
    Север 100 200 150
    Юг 80 90 110
    Восток 60 70 80
    Ожидаемый вывод
    melt shape=(9, 3)
    pivot columns=['region', 'q1', 'q2', 'q3']
    Восток total=210
    Север total=450
    Юг total=280
    explode shape=(9, 2)
    Север q1
    Север q2
    Север q3
    Юг q1
    Юг q2
    Юг q3
    Восток q1
    Восток q2
    Восток q3
    
Решение
Как проверяется решение

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

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