pandas.core.groupby.SeriesGroupBy.transform
- SeriesGroupBy.transform(func, *args, engine=None, engine_kwargs=None, **kwargs)[source]
-
Вызов функции, создающей серию с теми же индексами в каждой группе.
Возвращает серию с теми же индексами, что и исходный объект, заполненную преобразованными значениями.
- Параметры
-
- f:функция
-
Функция, применяемая к каждой группе. Требования см. в разделе «Примечания» ниже.
Также может принимать функцию Numba JIT с
engine='numba'.Если выбран
'numba'движок, функция должна быть пользовательской функцией сvaluesиindexв качестве первого и второго аргументов соответственно в сигнатуре функции. Индекс каждой группы будет передан пользовательской функции и, при необходимости, будет доступен для использования.Изменено в версии 1.1.0.
- *args
-
Позиционные аргументы для передачи в func.
- engine:строка, по умолчанию None
-
'cython': Выполняет функцию через C-расширения из cython.'numba': Выполняет функцию через скомпилированный JIT-код из numba.None: По умолчанию'cython'или глобальная настройкаcompute.use_numba
Добавлена в версии 1.1.0.
- engine_kwargs:словарь, по умолчанию None
-
Для
'cython'движка, нет допустимыхengine_kwargsДля
'numba'движка, движок может приниматьnopython,nogilиparallelключи словаря. Значения должны быть либоTrueилиFalse. По умолчаниюengine_kwargsдля'numba'движка{'nopython': True, 'nogil': False, 'parallel': False}, и будет применен к функции
Добавлена в версии 1.1.0.
- **kwargs
-
Ключевые аргументы для передачи в func.
- Возвращает
-
- Серия
См. также
Series.groupby.apply-
Применить функцию
funcпо группам и объединить результаты вместе. Series.groupby.aggregate-
Агрегировать с помощью одной или нескольких операций по указанной оси.
Series.transform-
Вызвать
funcна self, создав серию с той же формой осей, что и self.
Примечания
Каждая группе присваивается атрибут ‘name’, если вам нужно узнать, с какой группой вы работаете.
Текущая реализация накладывает три требования на f:
f должно возвращать значение, имеющее ту же форму, что и входная подрамка, или которое может быть преобразовано к форме входной подрамки. Например, если f возвращает скаляр, он будет преобразован к форме, соответствующей форме входной подрамки.
если это DataFrame, f должно поддерживать применение по столбцам в подрамке. Если f также поддерживает применение к всей подрамке, используется быстрый путь, начиная со второго блока.
f не должно изменять группы. Изменение не поддерживается и может привести к непредсказуемым результатам. Подробнее см. Изменение с помощью пользовательских функций (UDF).
При использовании
engine='numba', внутренней обратной связи не будет. Данные группы и индекс группы будут переданы как массивы numpy в JIT-скомпилированную пользовательскую функцию, и никакие другие попытки выполнения не будут предприняты.Изменено в версии 1.3.0: Результат типа будет отражать значение, возвращенное переданной
func, см. примеры ниже.Устарело начиная с версии 1.5.0: При использовании
.transformдля сгруппированного DataFrame и если функция преобразования возвращает DataFrame, в настоящее время pandas не выравнивает индекс результата с индексом входных данных. Это поведение устарело, и выравнивание будет выполнено в будущей версии pandas. Для избегания выравнивания можно применить.to_numpy()к результату функции преобразования.Примеры
>>> df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', ... 'foo', 'bar'], ... 'B' : ['one', 'one', 'two', 'three', ... 'two', 'two'], ... 'C' : [1, 5, 5, 2, 5, 5], ... 'D' : [2.0, 5., 8., 1., 2., 9.]}) >>> grouped = df.groupby('A')[['C', 'D']] >>> grouped.transform(lambda x: (x - x.mean()) / x.std()) C D 0 -1.154701 -0.577350 1 0.577350 0.000000 2 0.577350 1.154701 3 -1.154701 -1.000000 4 0.577350 -0.577350 5 0.577350 1.000000Результат преобразования, преобразуемый в новую форму
>>> grouped.transform(lambda x: x.max() - x.min()) C D 0 4.0 6.0 1 3.0 8.0 2 4.0 6.0 3 3.0 8.0 4 4.0 6.0 5 3.0 8.0Изменено в версии 1.3.0: Результат типа будет отражать значение, возвращенное переданной
func, например:>>> grouped.transform(lambda x: x.astype(int).max()) C D 0 5 8 1 5 9 2 5 8 3 5 9 4 5 8 5 5 9
© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/1.5.0/reference/api/pandas.core.groupby.SeriesGroupBy.transform.html