Spec-Zone.ru › pandas 1

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API