Ответ
Метод 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в подобных сценариях.