pandas.core.groupby.DataFrameGroupBy.transform
- DataFrameGroupBy.transform(func, *args, engine=None, engine_kwargs=None, **kwargs)[source]
-
Вызов функции, производящей DataFrame с одинаковыми индексами в каждой группе.
Возвращает DataFrame с теми же индексами, что и исходный объект, заполненный преобразованными значениями.
- Параметры:
-
- f:функция, строка
-
Функция для применения к каждой группе. Требования см. в разделе Примечания ниже.
Допустимые входные данные:
Строка
Python функция
Функция Numba JIT с
engine='numba'указанным.
С этим движком поддерживается только передача одной функции. Если выбран движок
'numba', функция должна быть пользовательской функцией сvaluesиindexв качестве первого и второго аргументов соответственно в сигнатуре функции. Индекс каждой группы будет передан в пользовательскую функцию и, по желанию, будет доступен для использования.Если выбрана строка, то она должна быть именем метода groupby, который вы хотите использовать.
- *args
-
Позиционные аргументы, которые нужно передать в func.
- engine:строка, по умолчанию None
-
'cython': Запускает функцию через C-расширения из cython.'numba': Запускает функцию через код, скомпилированный JIT, из numba.None: По умолчанию'cython'или глобальное значениеcompute.use_numba
- engine_kwargs:словарь, по умолчанию None
-
Для движка
'cython', нет допустимыхengine_kwargsДля движка
'numba', движок может принимать ключи словаряnopython,nogilиparallel. Значения должны быть либоTrue, либоFalse. Значение по умолчаниюengine_kwargsдля движка'numba'равно{'nopython': True, 'nogil': False, 'parallel': False}и будет применено к функции
- **kwargs
-
Ключевые аргументы, которые нужно передать в func.
- Возвращает:
-
- DataFrame
См. также
DataFrame.groupby.apply-
Применение функции
funcпо группам и объединение результатов вместе. DataFrame.groupby.aggregate-
Агрегирование с использованием одной или нескольких операций над указанной осью.
DataFrame.transform-
Вызов
funcдля self, производящий DataFrame с формой осей, такой же, как у 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()на результате функции преобразования, чтобы избежать выравнивания.Примеры
>>> 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>>> grouped.transform("mean") C D 0 3.666667 4.0 1 4.000000 5.0 2 3.666667 4.0 3 4.000000 5.0 4 3.666667 4.0 5 4.000000 5.0Изменено в версии 1.3.0.
Результат dtype будет отражать возвращаемое значение переданного
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/2.2.2/reference/api/pandas.core.groupby.DataFrameGroupBy.transform.html