GroupBy и агрегация
df.groupby(), agg(), transform(), apply() и именованные агрегации с помощью Named Aggregation.
«GroupBy и агрегация» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Идея разделения, применения и объединения
GroupBy следует шаблону «разделение — применение — объединение»: разбивает строки на группы по ключу, применяет функцию к каждой группе, затем объединяет результаты в одну таблицу. Это основа большинства аналитических сводок.
import pandas as pd
df = pd.DataFrame({
"dept": ["A", "A", "B", "B", "B"],
"salary": [50, 70, 40, 60, 80],
})Базовый groupby
df.groupby("col") создаёт сгруппированный объект. Последующий вызов агрегирования, например .mean(), вычисляет одно значение для каждой группы.
print(df.groupby("dept")["salary"].mean())
# dept
# A 60.0
# B 60.0Несколько агрегирований
Вызовите несколько операций свёртки одновременно с помощью .agg([...]), создав отдельный столбец для каждой функции.
print(df.groupby("dept")["salary"].agg(["mean", "min", "max", "count"]))Словарь агрегирования по столбцам
Передайте словарь в .agg, чтобы применять разные функции к разным столбцам.
df["bonus"] = [5, 7, 4, 6, 8]
out = df.groupby("dept").agg({"salary": "mean", "bonus": "sum"})
print(out)Именованное агрегирование
Именованное агрегирование задаёт понятные имена выходным столбцам с помощью синтаксиса pd.NamedAgg. Это позволяет избежать неясных многоуровневых заголовков столбцов.
out = df.groupby("dept").agg(
avg_salary=("salary", "mean"),
total_bonus=("bonus", "sum"),
)
print(out)Группировка по нескольким ключам
Передайте список столбцов, чтобы одновременно группировать данные по нескольким ключам и получить иерархический результат (MultiIndex).
df["level"] = ["jr", "sr", "jr", "sr", "sr"]
print(df.groupby(["dept", "level"])["salary"].mean())transform: результат той же формы
.transform() возвращает результат, согласованный с исходными строками (ORIGINAL), а не по одной строке на группу. Это идеально подходит для добавления статистики группы обратно в качестве нового столбца.
df["dept_avg"] = df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "dept_avg"]])Нормализация с помощью transform
Поскольку transform распространяет результат обратно на каждую строку, можно нормализовать данные внутри групп, например вычитая среднее группы.
df["centered"] = df["salary"] - df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "centered"]])Пользовательская логика с помощью apply
.apply() передаёт каждую группу (в виде подтаблицы DataFrame) Вашей функции. Используйте его для логики, которую не удаётся выразить встроенными агрегированиями, например для возврата N верхних строк в каждой группе.
top = df.groupby("dept").apply(lambda g: g.nlargest(1, "salary"))
print(top[["dept", "salary"]])agg и transform и apply
agg сводит каждую группу к одному значению. transform возвращает одно значение для каждой исходной строки. apply — гибкий, но более медленный универсальный вариант. Для ясности и скорости выбирайте наиболее специализированный вариант.
Удаление группировки с помощью reset_index
Результаты GroupBy помещают ключи в индекс. Вызовите .reset_index(), чтобы вернуть их в обычные столбцы, которых ожидает большинство последующего кода.
flat = df.groupby("dept")["salary"].mean().reset_index()
print(flat)
# dept salary
# 0 A 60.0
# 1 B 60.0Проверка знаний
Проверьте, насколько хорошо Вы понимаете groupby.
Повторение
Основы GroupBy:
- Разделение, применение и объединение через
df.groupby("col") .agg([...]), а также словарное и именованное агрегирование для получения нескольких показателей.transform()возвращает результаты исходной формы.apply()для произвольной логики внутри групп- Всегда используйте
.reset_index(), чтобы преобразовать ключи групп обратно в столбцы
Часто задаваемые вопросы
Урок «GroupBy и агрегация» бесплатный?
Да — полный текст урока «GroupBy и агрегация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «GroupBy и агрегация»?
df.groupby(), agg(), transform(), apply() и именованные агрегации с помощью Named Aggregation. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «GroupBy и агрегация»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- GroupBy и агрегация
- Сводные таблицы и перекрёстная агрегация
- Расширенное объединение и соединение
- Временные ряды в Pandas