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

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

Откройте условие и решите задачу перед чтением следующей темы. В задачах на код проверяется программа, в тестовых заданиях — выбранный ответ. Для последовательного обучения вернитесь в программу бесплатного курса.

Попробуйте сами. Соберите сводку количества и выручки по магазинам двумя способами и сравните результат. Посмотреть практику — в бесплатном курсе, с проверкой решения.

Дальше можно перейти к расчёту среднего чека с учётом статусов заказов и возвратов — это открытый урок платного курса практической аналитики. Посмотреть продолжение.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.