Pandas Advanced: Агрегация, Сводные таблицы и Джойны
Цели лекции
- Освоить парадигму Split-Apply-Combine (Groupby) для получения инсайтов из данных.
- Научиться перестраивать структуру таблиц с помощью Pivot Tables (аналог сводных таблиц Excel).
- Понять логику объединения данных: Merge и Join (аналоги SQL JOIN).
- Разработать стратегию работы с пропущенными данными (Missing Values).
Часть 1: Группировка (Groupby) — Сердце аналитики
В 90% случаев бизнес-вопрос звучит не "Сколько мы заработали?", а "Сколько мы заработали в разрезе регионов/месяцев/категорий?". Для этого используется метод .groupby().
1.1. Парадигма Split-Apply-Combine
Этот термин ввел создатель pandas Уэс МакКинни. Процесс состоит из трех скрытых шагов:
- Split: Данные разбиваются на "ведра" (группы) по какому-то ключу (например, по
Category). - Apply: К каждому "ведру" применяется функция агрегации (сумма, среднее, макс).
- Combine: Результаты склеиваются обратно в единый DataFrame.
1.2. Синтаксис инженера
# Группируем по 'City', берем колонку 'Sales', считаем сумму
df.groupby('City')['Sales'].sum()1.3. Множественная агрегация (.agg)
Часто нужно посчитать сразу несколько метрик. Используйте метод .agg():
df.groupby('Category')['Price'].agg(['mean', 'max', 'count'])Это вернет таблицу, где для каждой категории есть средняя цена, максимальная и количество товаров.
Часть 2: Сводные таблицы (Pivot Tables)
Если groupby создает "длинную" таблицу (много строк), то pivot_table создает "широкую" таблицу (матрицу), удобную для отчетов и тепловых карт (Heatmaps).
2.1. Анатомия Pivot Table
Представьте, что вы хотите увидеть матрицу, где:
- Индекс (строки): Дата.
- Колонки: Города.
- Значения (в ячейках): Выручка.
В groupby это потребовало бы сложной обработки. В Pivot это одна строка:
pivot = df.pivot_table(
index='Date',
columns='City',
values='Sales',
aggfunc='sum'
)Аналогия с Excel
Это полная копия функционала "Insert -> Pivot Table" в Excel, но программно и воспроизводимо.
Часть 3: Объединение таблиц (Merge & Join)
В реальности данные никогда не лежат в одном файле. У вас есть Customers.csv, Orders.csv и Products.csv. Их нужно собрать воедино.
3.1. Функция pd.merge()
Это прямой аналог SQL JOIN. Синтаксис:
pd.merge(left_df, right_df, on='key_column', how='inner')3.2. Типы объединения (how=)
Критический параметр
Выбор типа объединения (how) — это критически важный параметр. Неверный выбор how приведет к потере данных или дубликатам.
inner(Внутреннее): Оставляет только те ключи, которые есть в обеих таблицах. (Пересечение множеств).- Риск: Если у клиента нет заказов, он исчезнет из отчета.
left(Левое): Оставляет все строки из левой таблицы, а из правой подтягивает совпадения. Если совпадения нет — ставитNaN.- Применение: "Покажи всех клиентов и их заказы (даже если заказов нет)". Самый частый тип в аналитике.
outer(Полное): Все ключи из обеих таблиц. (Объединение множеств).right(Правое): Зеркально левому. Используется редко.
Часть 4: Работа с пропусками (Missing Values)
Данные из реального мира "грязные". Пропуски в Pandas обозначаются как NaN (Not a Number) или None. NaN — это заразный вирус: 5 + NaN = NaN.
4.1. Обнаружение
df.isna(): Возвращает маску True/False.df.isna().sum(): Показывает количество пропусков по колонкам. Обязательный шаг EDA.
4.2. Стратегии борьбы
У инженера есть три пути:
df.dropna(): Удаляет строку, если в ней есть хоть одинNaN.- Когда применять: Пропусков мало (< 5%), и они случайны.