groupby и agg: сводные показатели с явными именами агрегатов
Содержание курса
groupby по нескольким столбцам с as_index=False
Один ключ группировки — это частный случай. Чаще в реальных данных нужно смотреть на комбинации: например, продажи по каждому региону внутри каждой категории. Для этого в groupby передаётся список столбцов.
Синтаксис не меняется — добавляется только список вместо одной строки:
import pandas as pd
df = pd.DataFrame({
'region': ['Север', 'Юг', 'Север', 'Юг', 'Север'],
'category': ['A', 'A', 'B', 'B', 'A'],
'sales': [100, 200, 150, 300, 80],
'units': [10, 20, 15, 30, 8]
})
result = df.groupby(['region', 'category'], as_index=False).agg(
total_sales=('sales', 'sum'),
avg_units=('units', 'mean')
)
print(result)
Вывод:
region category total_sales avg_units 0 Север A 180 9.0 1 Север B 150 15.0 2 Юг A 200 20.0 3 Юг B 300 30.0
Оба ключа — region и category — остаются обычными столбцами. Индекс — стандартный RangeIndex. Таблица плоская и сразу готова к фильтрации или сортировке.
Что здесь происходит: pandas находит все уникальные комбинации значений region и category, считает агрегаты по строкам, попавшим в каждую комбинацию, и собирает результат. Строки ('Север', 'A') из оригинального DataFrame — это индексы 0 и 4, их sales суммируется как 100 + 80 = 180.
Параметр as_index=False здесь особенно важен. Без него pandas создал бы составной индекс из двух уровней — один для region, другой для category. Работать с таким результатом через стандартные операции заметно сложнее. Поэтому для многоключевой группировки as_index=False — единственный рекомендуемый паттерн в этом курсе.
Если нужно добавить третий ключ — просто расширяешь список: groupby(['region', 'category', 'month'], as_index=False). Количество ключей не ограничено; синтаксис agg с именованными парами при этом не меняется.
В следующем уроке groupby появится в другой роли: вместо agg, который сжимает таблицу до одной строки на группу, будет transform — он возвращает групповой показатель для каждой строки исходного DataFrame, не меняя его длину.
Закрепите тему на задачах
Определите гранулярность результата: одна строка на группу. Сверьте сумму групп с исходной таблицей и учтите поведение группировки с пустым ключом.
groupby и agg: сводные показатели с явными именами агрегатов — задача по NumPy и pandas
pandas groupby и agg: сводка по двум ключам
pandas groupby и agg: группировка, rename и sort_values
Откройте условие и решите задачу перед чтением следующей темы. В задачах на код проверяется программа, в тестовых заданиях — выбранный ответ. Для последовательного обучения вернитесь в программу бесплатного курса.
Попробуйте сами. Соберите сводку количества и выручки по магазинам двумя способами и сравните результат. Посмотреть практику — в бесплатном курсе, с проверкой решения.
Дальше можно перейти к расчёту среднего чека с учётом статусов заказов и возвратов — это открытый урок платного курса практической аналитики. Посмотреть продолжение.
