Spec-Zone.ru › pandas 2

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

Spec-Zone.ru

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