pandas.core.groupby.SeriesGroupBy.apply
- SeriesGroupBy.apply(func, *args, **kwargs)[source]
-
Применяет функцию к группам и объединяет результаты.
Функция, переданная в
func, должна принимать серию в качестве первого аргумента и возвращать DataFrame, Series или скаляр.applyзатем позаботится об объединении результатов обратно в один DataFrame или Series.applyпоэтому является очень гибким методом группировки.Хотя
applyявляется очень гибким методом, его недостатком является то, что его использование может быть значительно медленнее, чем использование более специфичных методов, таких какaggилиtransform. Pandas предлагает широкий спектр методов, которые будут намного быстрее, чем использованиеapplyдля их конкретных целей, поэтому старайтесь использовать их перед обращением кapply.- Parameters:
-
- func:callable
-
Вызываемый объект, который принимает серию в качестве первого аргумента и возвращает DataFrame, Series или скаляр. Кроме того, вызываемый объект может принимать позиционные и именованные аргументы.
- include_groups:bool, по умолчанию True
-
Если True, попытается применить
funcк группам в случае, если они являются столбцами DataFrame. Если это вызывает TypeError, результат будет вычислен без учета групп. Если False, группы будут исключены при примененииfunc.Добавлен в версии 2.2.0.
Устарело начиная с версии 2.2.0: Установка include_groups в True устарела. В будущей версии pandas будет разрешен только False.
- args, kwargs:tuple и dict
-
Дополнительные позиционные и именованные аргументы для передачи в
func.
- Returns:
-
- Series или DataFrame
См. также
pipeПрименить функцию к всему объекту GroupBy вместо каждой группы.
aggregateПрименить агрегационную функцию к объекту GroupBy.
transformПрименить функцию столбец за столбцом к объекту GroupBy.
Series.applyПрименить функцию к Series.
DataFrame.applyПрименить функцию к каждой строке или столбцу DataFrame.
Примечания
Изменено в версии 1.3.0: Результирующий тип данных будет отражать значение возвращаемого значения переданной функции
func, см. примеры ниже.Функции, изменяющие переданный объект, могут привести к неожиданному поведению или ошибкам и не поддерживаются. См. Изменение с помощью пользовательских функций (UDF) для получения дополнительной информации.
Примеры
>>> s = pd.Series([0, 1, 2], index='a a b'.split()) >>> g1 = s.groupby(s.index, group_keys=False) >>> g2 = s.groupby(s.index, group_keys=True)
Из
sвыше видно, что уgдве группы,aиb. Обратите внимание, что уg1две группы,aиb, и они отличаются только аргументомgroup_keys. Вызов apply различными способами, мы можем получить разные результаты группировки:Пример 1: Функция, переданная в apply, принимает Series в качестве аргумента и возвращает Series. apply объединяет результат для каждой группы вместе в новую Series.
Изменено в версии 1.3.0: Результирующий тип данных будет отражать значение возвращаемого значения переданной функции
func.>>> g1.apply(lambda x: x * 2 if x.name == 'a' else x / 2) a 0.0 a 2.0 b 1.0 dtype: float64
В приведенном выше примере группы не являются частью индекса. Мы можем включить их, используя
g2гдеgroup_keys=True:>>> g2.apply(lambda x: x * 2 if x.name == 'a' else x / 2) a a 0.0 a 2.0 b b 1.0 dtype: float64
Пример 2: Функция, переданная в apply, принимает Series в качестве аргумента и возвращает скаляр. apply объединяет результат для каждой группы вместе в Series, включая установку индекса как соответствующим образом:
>>> g1.apply(lambda x: x.max() - x.min()) a 1 b 0 dtype: int64
Аргумент
group_keysздесь не имеет эффекта, потому что результат не имеет аналогичного индекса (т. е. преобразование) по сравнению с вводом.>>> g2.apply(lambda x: x.max() - x.min()) a 1 b 0 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.apply.html