Сводная таблица pandas: агрегаты, суммы и пустые ячейки
pivot_table в pandas строит сводную таблицу и агрегирует повторные сочетания ключей. index задаёт строки, columns — столбцы, values — показатель, aggfunc — способ его расчёта.
Укажите агрегат явно
По умолчанию pivot_table считает среднее. Для суммы продаж укажите aggfunc="sum"; иначе код выполнится, но ответ может не соответствовать бизнес-задаче. fill_value=0 заполняет пустые ячейки полученного результата.
Обычный pivot только меняет форму таблицы и не агрегирует: повторная пара ключей вызовет ошибку. Выбирайте между ними по наличию повторов. Если нужны ключи в обычных столбцах после построения сводной, используйте reset_index().
Пример на других данных
import pandas as pd
df = pd.DataFrame({"shop": ["A", "A", "B"],
"month": ["Jan", "Jan", "Feb"], "sales": [10, 20, 7]})
p = df.pivot_table(index="shop", columns="month", values="sales",
aggfunc="sum", fill_value=0)
print(int(p.loc["A", "Jan"]))
print(int(p.loc["B", "Jan"]))
Результат:
30 0
Попробуйте сами
Ниже — отдельное упражнение: напишите код и запустите проверку. Другие упражнения по этой теме. Для обучения по порядку откройте бесплатный курс NumPy и pandas.
Сводная таблица продаж по отделам и кварталам: pivot_table с aggfunc, fill_value и reset_index
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая строит сводную таблицу продаж из длинного формата.
- Читает из
stdinцелое числоn— количество строк таблицы (n >= 1). - Читает следующие
nстрок; каждая содержит три токена через пробел:dept(строка без пробелов),quarter(строка видаQ1,Q2и т.д.),amount(целое число). Пример строки:Alpha Q1 700. - Строит
pd.DataFrameиз словаря списков с ключами'dept','quarter','amount'. - Строит сводную таблицу через
pd.pivot_tableс параметрами:
index='dept'columns='quarter'values='amount'aggfunc='sum'— явно, так как одна пара(dept, quarter)может встречаться несколько разfill_value=0— заполнить отсутствующие комбинации нулём
- Сохраняет результат в
pt. Вызываетpt.reset_index(), сохраняет вpt_flat. Убирает имя оси столбцов:pt_flat.columns.name = None. - Выводит строку:
shape=<shape>— формуpt_flatв виде(строк, столбцов), напримерshape=(3, 3). - Выводит строку:
columns=<список>— список столбцовpt_flatв виде Python-списка, напримерcolumns=['dept', 'Q1', 'Q2']. Порядок столбцов —'dept', затем столбцы кварталов в алфавитном порядке (pandas сортирует их автоматически). - Для каждой строки
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=<число>
...
Пример
- Ввод
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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- melt, pivottable и explode: широкий и длинный форматы — задача по NumPy и pandas
- pandas explode и groupby: подсчёт тегов товаров
- pandas Series из словаря: index, shape и dtype
- pandas DataFrame из списка словарей: пример и задача
- Загрузка CSV с явными типами и датами через readcsv — задача по NumPy и pandas
- Загрузка CSV в pandas: dtype, usecols и разбор дат
