GroupBy, агрегация и сводные таблицы
Обобщайте данные с помощью операций groupby и сводных таблиц.
«GroupBy, агрегация и сводные таблицы» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Основы groupby
df.groupby("col") разделяет DataFrame на группы по уникальным значениям столбца. Добавьте агрегирование, чтобы получить результаты.
import pandas as pd
df = pd.DataFrame({
"dept":["HR","IT","HR","IT","HR"],
"salary":[60,80,65,90,70]
})
print(df.groupby("dept")["salary"].mean())
# HR 65.0
# IT 85.0Несколько функций агрегирования
Используйте agg(), чтобы применить несколько функций агрегирования одновременно.
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR","IT"],"sal":[60,80,65,90]})
result = df.groupby("dept")["sal"].agg(["mean","max","count"])
print(result)Именованные агрегирования
Используйте именованные аргументы в agg(), чтобы явно задать имена выходных столбцов (Pandas 0.25 и новее).
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR","IT"],"sal":[60,80,65,90]})
result = df.groupby("dept").agg(
avg_sal=("sal","mean"),
max_sal=("sal","max"),
count=("sal","size")
)
print(result)groupby по нескольким столбцам
Передайте список столбцов, чтобы создать иерархические группы.
import pandas as pd
df = pd.DataFrame({
"year":[2023,2023,2024,2024],
"dept":["HR","IT","HR","IT"],
"sal":[60,80,65,90]
})
print(df.groupby(["year","dept"])["sal"].sum())transform()
transform возвращает Series, выровненный по исходному индексу. Это удобно, чтобы добавить статистику по группам обратно в исходный DataFrame.
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR","IT"],"sal":[60,80,65,90]})
df["dept_avg"] = df.groupby("dept")["sal"].transform("mean")
print(df)filter()
filter(func) оставляет только те группы, для которых функция возвращает True.
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR"],"sal":[60,80,65]})
# Keep only departments with mean salary > 70:
result = df.groupby("dept").filter(lambda g: g["sal"].mean() > 70)
print(result)pivot_table
pd.pivot_table создаёт сводную таблицу в стиле электронной таблицы с настраиваемым агрегированием.
import pandas as pd
df = pd.DataFrame({
"year":[2023,2023,2024,2024],
"region":["East","West","East","West"],
"sales":[100,150,120,200]
})
pt = pd.pivot_table(df, values="sales",
index="year", columns="region",
aggfunc="sum")
print(pt)crosstab
pd.crosstab вычисляет перекрёстную таблицу — это удобно для подсчёта сочетаний категориальных значений.
import pandas as pd
df = pd.DataFrame({"gender":["M","F","M","F","M"],"result":["pass","pass","fail","fail","pass"]})
print(pd.crosstab(df["gender"], df["result"]))apply()
apply(func) применяет пользовательскую функцию к DataFrame каждой группы (ось 0) или к каждой строке/столбцу (ось 1).
import pandas as pd
df = pd.DataFrame({"dept":["HR","IT","HR"],"sal":[60,80,65]})
def range_sal(g):
return g["sal"].max() - g["sal"].min()
print(df.groupby("dept").apply(range_sal))unstack для изменения формы
После группировки по нескольким уровням используйте unstack(), чтобы переместить внутренний уровень индекса в столбцы.
import pandas as pd
df = pd.DataFrame({"year":[2023,2023,2024],"dept":["HR","IT","HR"],"sal":[60,80,65]})
result = df.groupby(["year","dept"])["sal"].mean().unstack()
print(result)resample для временных рядов
resample("M") группирует DataFrame временного ряда по календарным периодам, позволяя выполнять помесячное или ежегодное агрегирование.
import pandas as pd
idx = pd.date_range("2024-01-01", periods=90, freq="D")
df = pd.DataFrame({"sales": range(90)}, index=idx)
monthly = df.resample("ME").sum()
print(monthly)Быстрая проверка
Что возвращает groupby().transform("mean")?
Итоги
groupby разделяет данные на группы для агрегирования. Используйте agg() для нескольких функций, transform() для распространения статистики группы обратно на исходные строки, filter() для удаления групп, а pivot_table()/crosstab() — для сводных данных по нескольким измерениям.
Часто задаваемые вопросы
Урок «GroupBy, агрегация и сводные таблицы» бесплатный?
Да — полный текст урока «GroupBy, агрегация и сводные таблицы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «GroupBy, агрегация и сводные таблицы»?
Обобщайте данные с помощью операций groupby и сводных таблиц. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «GroupBy, агрегация и сводные таблицы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы Series и DataFrame
- Индексация, фильтрация и логические маски
- GroupBy, агрегация и сводные таблицы
- Объединение, соединение и очистка данных