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