pandas.core.groupby.SeriesGroupBy.transform#
- SeriesGroupBy.преобразовать(функция, *args, движок=None, engine_kwargs=None, **kwargs)[источник]#
Вызовите функцию, создающую Series с тем же индексом для каждой группы.
Возвращает Series с теми же индексами, что и исходный объект, заполненный преобразованными значениями.
- Параметры:
- fфункция, str
Функция для применения к каждой группе. См. раздел Примечания ниже для требований.
Допустимые входные данные:
String
Функция Python
Функция Numba JIT с
engine='numba'указано.
Только передача одной функции поддерживается этим движком. Если
'numba'выбран механизм, функция должна быть пользовательской функцией сvaluesиindexкак первый и второй аргументы соответственно в сигнатуре функции. Индекс каждой группы будет передан пользовательской функции и при необходимости доступен для использования.Если выбрана строка, то она должна быть именем метода groupby, который вы хотите использовать.
- *args
Позиционные аргументы для передачи в func.
- движокstr, по умолчанию None
'cython': Запускает функцию через C-расширения из cython.'numba': Запускает функцию через JIT-скомпилированный код из numba.None: По умолчанию'cython'или глобальная настройкаcompute.use_numba
- engine_kwargsdict, по умолчанию None
Для
'cython'движок, нет принятыхengine_kwargsДля
'numba'движок, движок может приниматьnopython,nogilиparallelключи словаря. Значения должны быть либоTrueилиFalse. По умолчаниюengine_kwargsдля'numba'движок это{'nopython': True, 'nogil': False, 'parallel': False}и будет применена к функции
- **kwargs
Именованные аргументы для передачи в функцию.
- Возвращает:
- Series
Смотрите также
Series.groupby.applyПрименить функцию
funcпо группам и объединить результаты вместе.Series.groupby.aggregateАгрегировать с использованием одной или нескольких операций по указанной оси.
Series.transformВызов
funcна self, производя Series с той же формой оси, что и self.
Примечания
Каждой группе присваивается атрибут 'name' на случай, если вам нужно знать, с какой группой вы работаете.
Текущая реализация накладывает три требования на f:
f должна возвращать значение, которое либо имеет ту же форму, что и входной подфрейм, либо может быть транслировано к форме входного подфрейма. Например, если f возвращает скаляр, он будет транслирован для соответствия форме входного подфрейма.
если это DataFrame, f должен поддерживать применение по столбцам в подфрейме. Если f также поддерживает применение ко всему подфрейму, то используется быстрый путь, начиная со второго фрагмента.
f не должен изменять группы. Изменение не поддерживается и может привести к неожиданным результатам. См. Изменение с помощью методов пользовательских функций (UDF) для получения дополнительной информации.
При использовании
engine='numba', не будет внутреннего поведения "отката". Данные группы и индекс группы будут переданы как массивы numpy в JIT-компилированную пользовательскую функцию, и не будет предпринято попыток альтернативного выполнения.Изменено в версии 1.3.0: Результирующий dtype будет отражать возвращаемое значение переданной
func, см. примеры ниже.Изменено в версии 2.0.0: При использовании
.transformна сгруппированном DataFrame, и функция преобразования возвращает DataFrame, pandas теперь выравнивает индекс результата с индексом входных данных. Вы можете вызвать.to_numpy()на результате функции преобразования, чтобы избежать выравнивания.Примеры
>>> ser = pd.Series([390.0, 350.0, 30.0, 20.0], ... index=["Falcon", "Falcon", "Parrot", "Parrot"], ... name="Max Speed") >>> grouped = ser.groupby([1, 1, 2, 2]) >>> grouped.transform(lambda x: (x - x.mean()) / x.std()) Falcon 0.707107 Falcon -0.707107 Parrot 0.707107 Parrot -0.707107 Name: Max Speed, dtype: float64
Результат трансформации с широковещанием
>>> grouped.transform(lambda x: x.max() - x.min()) Falcon 40.0 Falcon 40.0 Parrot 10.0 Parrot 10.0 Name: Max Speed, dtype: float64
>>> grouped.transform("mean") Falcon 370.0 Falcon 370.0 Parrot 25.0 Parrot 25.0 Name: Max Speed, dtype: float64
Изменено в версии 1.3.0.
Результирующий dtype будет отражать возвращаемое значение переданной
func, например:>>> grouped.transform(lambda x: x.astype(int).max()) Falcon 390 Falcon 390 Parrot 30 Parrot 30 Name: Max Speed, dtype: int64