Spec-Zone.ru › pandas 2

pandas.core.groupby.SeriesGroupBy.transform

SeriesGroupBy.transform(func, *args, engine=None, engine_kwargs=None, **kwargs)[source]

Вызов функции, генерирующей серию с теми же индексами, что и в каждой группе.

Возвращает серию с теми же индексами, что и исходный объект, заполненную преобразованными значениями.

Параметры:
f:функция, str

Функция, применяемая к каждой группе. Требования см. в разделе Примечания ниже.

Допускаемые входные данные:

  • Строка

  • Python-функция

  • Функция Numba JIT с engine='numba' указанным.

Поддерживается только передача одной функции с этим движком. Если выбран движок 'numba', функция должна быть пользовательской функцией с values и index в качестве первого и второго аргументов соответственно в сигнатуре функции. Индекс каждой группы будет передан в пользовательскую функцию и, при необходимости, будет доступен для использования.

Если выбрана строка, то она должна быть именем метода groupby, который вы хотите использовать.

*args

Позиционные аргументы, передаваемые в func.

engine:str, по умолчанию None
  • 'cython' : Выполняет функцию с помощью C-расширений из cython.

  • 'numba' : Выполняет функцию с помощью JIT-скомпилированного кода из numba.

  • None : По умолчанию 'cython' или глобальная настройка compute.use_numba

engine_kwargs:dict, по умолчанию None
  • Для движка 'cython' допустимые engine_kwargs отсутствуют.

  • Для движка 'numba' движок может принимать nopython, nogil и parallel ключи словаря. Значения должны быть либо True, либо False. По умолчанию engine_kwargs для движка 'numba' — {'nopython': True, 'nogil': False, 'parallel': False}, и оно будет применено к функции.

**kwargs

Ключевые аргументы, которые должны быть переданы в func.

Возвращает:
Серия

См. также

Series.groupby.apply

Применение функции func по группам и объединение результатов.

Series.groupby.aggregate

Агрегирование с использованием одной или нескольких операций по указанной оси.

Series.transform

Вызов func на объекте, возвращающем серию с той же формой оси, что и у исходного объекта.

Примечания

Каждой группе присваивается атрибут «имя», если вам нужно знать, с какой группой вы работаете.

Текущая реализация накладывает три требования на f:

  • f должен возвращать значение, имеющее ту же форму, что и входной подфрейм, или может быть расширено до формы входного подфрейма. Например, если f возвращает скалярное значение, оно будет расширено до той же формы, что и входной подфрейм.

  • если это DataFrame, f должен поддерживать применение по столбцам в подфрейме. Если f также поддерживает применение ко всему подфрейму, то используется быстрый путь, начиная со второй части.

  • f не должен изменять группы. Изменение не поддерживается и может привести к неожиданным результатам. Более подробную информацию см. в разделе Изменение с помощью пользовательских функций (UDF).

При использовании engine='numba', внутренней «обработки по умолчанию» не будет. Данные группы и индекс группы будут переданы в функцию JIT, и альтернативные попытки выполнения не будут предприниматься.

Изменено в версии 1.3.0: Тип результата будет отражать возвращаемое значение переданной func, см. примеры ниже.

Изменено в версии 2.0.0: При использовании .transform на сгруппированном DataFrame и функции преобразования возвращает DataFrame, pandas теперь выравнивает индекс результата с индексом входных данных. Вы можете вызвать .to_numpy() на результате функции преобразования, чтобы избежать выравнивания.

Примеры

>>> ser = pd.Series([390.0, 350.0, 30.0, 20.0],
...                 index=["Falcon", "Falcon", "Parrot", "Parrot"],
...                 name="Max Speed")
>>> grouped = ser.groupby([1, 1, 2, 2])
>>> grouped.transform(lambda x: (x - x.mean()) / x.std())
    Falcon    0.707107
    Falcon   -0.707107
    Parrot    0.707107
    Parrot   -0.707107
    Name: Max Speed, dtype: float64

Результат преобразования с расширением

>>> grouped.transform(lambda x: x.max() - x.min())
Falcon    40.0
Falcon    40.0
Parrot    10.0
Parrot    10.0
Name: Max Speed, dtype: float64
>>> grouped.transform("mean")
Falcon    370.0
Falcon    370.0
Parrot     25.0
Parrot     25.0
Name: Max Speed, dtype: float64

Изменено в версии 1.3.0.

Тип результата будет отражать возвращаемое значение переданной func, например:

>>> grouped.transform(lambda x: x.astype(int).max())
Falcon    390
Falcon    390
Parrot     30
Parrot     30
Name: Max Speed, dtype: int64

© 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.SeriesGroupBy.transform.html

Spec-Zone.ru

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