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

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

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

Найди и исправь: три ошибки в melt, pivot_table и explode

Что уже дано

В редакторе уже есть сломанный код. В нём ровно три ошибки в трёх независимых строках:

  1. В вызове pd.melt не передан параметр id_vars — из-за этого столбец 'product' тоже разворачивается в строки вместо того, чтобы оставаться идентификатором.
  2. В вызове pd.pivot_table не указан параметр aggfunc — pandas использует 'mean' по умолчанию вместо требуемого 'sum'.
  3. После .explode('months') не вызван .reset_index(drop=True) — индекс результата содержит повторяющиеся метки вместо сквозного RangeIndex.

Каждая ошибка находится в отдельной строке кода. Исправьте все три.

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

Исправьте три ошибки так, чтобы программа:

  1. Читала из stdin целое число n — количество строк таблицы продуктов.
  2. Читала следующие n строк; каждая содержит три токена через пробел: product (строка без пробелов), jan (целое число), feb (целое число).
  3. Строила pd.DataFrame из словаря списков с ключами 'product', 'jan', 'feb'.
  4. Переводила его в длинный формат через pd.melt с id_vars=['product'], value_vars=['jan', 'feb'], var_name='month', value_name='sales'. Выводила melt_shape=<shape>.
  5. Строила сводную таблицу через pd.pivot_table с index='product', columns='month', values='sales', aggfunc='sum', fill_value=0. Выводила pivot_sum_jan=<сумма по jan>.
  6. Строила pd.DataFrame с столбцами 'product' (список уникальных продуктов в порядке первого появления) и 'months' (для каждого — ['jan', 'feb']). Разворачивала через .explode('months').reset_index(drop=True). Выводила explode_index=<список меток индекса>.

Ввод и вывод

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

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

Формат ввода

n
product1 jan1 feb1
...
productN janN febN

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

melt_shape=(<строк>, <столбцов>)
pivot_sum_jan=<число>
explode_index=[0, 1, ..., 2u-1], где u — число уникальных продуктов
О данных в ответах

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

Проверяется тестами (1)
  • Тест 1
    Ввод
    3
    Альфа 100 200
    Бета 150 250
    Гамма 120 180
    
    Ожидаемый вывод
    melt_shape=(6, 3)
    pivot_sum_jan=370
    explode_index=[0, 1, 2, 3, 4, 5]
    
Решение
Как проверяется решение

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

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