Как работает метод `transform` в сочетании с `groupby` в Pandas?

«Как работает метод `transform` в сочетании с `groupby` в Pandas?» — вопрос из категории Pandas и NumPy, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод transform после группировки (groupby) применяет заданную функцию к каждой группе отдельно и возвращает объект (Series или DataFrame) того же размера и с тем же индексом, что и исходные данные. Это ключевое отличие от agg или apply, которые возвращают сводную статистику по группам.

Основное назначение: Создание новых столбцов на основе групповых агрегатов (например, центрирование данных внутри группы, расчет ранга или доли).

Пример: Добавление среднего по группе к каждому наблюдению

import pandas as pd

df = pd.DataFrame({
    'Department': ['Sales', 'Sales', 'IT', 'IT', 'HR'],
    'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Salary': [70000, 80000, 90000, 95000, 60000]
})

# Вычисляем среднюю зарплату по департаменту и добавляем как новый столбец
df['Dept_Avg_Salary'] = df.groupby('Department')['Salary'].transform('mean')

# Вычисляем отклонение зарплаты сотрудника от средней по его департаменту
df['Salary_Diff_From_Avg'] = df['Salary'] - df['Dept_Avg_Salary']

print(df)
Результат: Department Employee Salary Dept_Avg_Salary Salary_Diff_From_Avg
0 Sales Alice 70000 75000.0 -5000.0
1 Sales Bob 80000 75000.0 5000.0
2 IT Charlie 90000 92500.0 -2500.0
3 IT David 95000 92500.0 2500.0
4 HR Eve 60000 60000.0 0.0

Ключевые особенности transform:

  • Сохранение формы: Исходный DataFrame не "схлопывается" по группам.
  • Автоматическое выравнивание (alignment): Результат автоматически сопоставляется по индексу, что исключает ошибки слияния (merge).
  • Гибкость: Работает как со встроенными агрегаторами ('mean', 'sum', 'std'), так и с пользовательскими функциями.
  • Производительность: Часто оптимизирован и работает быстрее, чем apply в подобных сценариях.