pandas.core.groupby.SeriesGroupBy.transform#

SeriesGroupBy.преобразовать(функция, *args, движок=None, engine_kwargs=None, **kwargs)[источник]#

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

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

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

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

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

  • String

  • Функция Python

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

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

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

*args

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

движокstr, по умолчанию None
  • 'cython' : Запускает функцию через C-расширения из cython.

  • 'numba' : Запускает функцию через JIT-скомпилированный код из numba.

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

engine_kwargsdict, по умолчанию None
  • Для 'cython' движок, нет принятых engine_kwargs

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

**kwargs

Именованные аргументы для передачи в функцию.

Возвращает:
Series

Смотрите также

Series.groupby.apply

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

Series.groupby.aggregate

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

Series.transform

Вызов func на self, производя Series с той же формой оси, что и 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() на результате функции преобразования, чтобы избежать выравнивания.

Примеры

>>> 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.

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

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