pandas.core.groupby.DataFrameGroupBy.transform
- DataFrameGroupBy.transform(func, *args, engine=None, engine_kwargs=None, **kwargs)[source]
-
Вызов функции, генерирующей DataFrame с теми же индексами в каждой группе.
Возвращает DataFrame с теми же индексами, что и исходный объект, заполненный преобразованными значениями.
- Параметры
-
- 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.
- Возвращает
-
- 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: Тип результата будет отражать значение возвращаемое переданной
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.DataFrameGroupBy.transform.html