melt, pivot_table и explode: широкий и длинный форматы
Содержание курса
Продажи по кварталам: melt → pivot_table → explode за один проход
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая выполняет три последовательных преобразования формата данных.
Шаг 1. Чтение и melt.
- Читает из
stdinцелое числоn— количество строк таблицы. - Читает следующие
nстрок; каждая содержит четыре токена через пробел:region(строка без пробелов),q1(целое число),q2(целое число),q3(целое число). Пример строки:Север 100 200 150. - Строит
pd.DataFrameиз словаря списков с ключами'region','q1','q2','q3'. - Вызывает
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.
- Строит сводную таблицу из
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.
- Строит
pd.DataFrameс двумя столбцами:
'region'— список уникальных регионов из исходного DataFrame (в порядке первого появления, без дублей).'quarters'— для каждого региона список['q1', 'q2', 'q3'](одинаковый для всех).
- Вызывает
.explode('quarters').reset_index(drop=True)и сохраняет вdf_ex. - Выводит строку:
explode shape=<shape>— например,explode shape=(9, 2). - Выводит все строки
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Ввод
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 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
