pandas.core.groupby.SeriesGroupBy.apply#
- SeriesGroupBy.apply(функция, *args, **kwargs)[источник]#
Применить функцию
funcпо группам и объединить результаты вместе.Функция, переданная в
applyдолжен принимать серию в качестве первого аргумента и возвращать DataFrame, Series или скаляр.applyзатем позаботится о объединении результатов обратно в единый dataframe или series.applyпоэтому является очень гибким методом группировки.В то время как
applyявляется очень гибким методом, его недостаток в том, что его использование может быть значительно медленнее, чем использование более специфичных методов, таких какaggилиtransform. Pandas предлагает широкий набор методов, которые будут значительно быстрее, чем использованиеapplyдля их конкретных целей, поэтому попробуйте использовать их перед обращением кapply.- Параметры:
- функцияcallable
Вызываемый объект, который принимает серию в качестве первого аргумента и возвращает dataframe, серию или скаляр. Кроме того, вызываемый объект может принимать позиционные и ключевые аргументы.
- include_groupsbool, по умолчанию True
Когда True, будет предпринята попытка применить
funcк группировкам в случае, если они являются столбцами DataFrame. Если это вызывает TypeError, результат будет вычислен без группировок. Когда False, группировки будут исключены при примененииfunc.Добавлено в версии 2.2.0.
Устарело с версии 2.2.0: Установка include_groups в True устарела. Только значение False будет разрешено в будущей версии pandas.
- args, kwargsкортеж и словарь
Необязательные позиционные и ключевые аргументы для передачи в
func.
- Возвращает:
- Series или DataFrame
Смотрите также
pipeПрименить функцию ко всему объекту GroupBy вместо применения к каждой группе.
aggregateПрименить агрегирующую функцию к объекту GroupBy.
transformПрименить функцию столбец за столбцом к объекту GroupBy.
Series.applyПрименить функцию к Series.
DataFrame.applyПрименить функцию к каждой строке или столбцу DataFrame.
Примечания
Изменено в версии 1.3.0: Результирующий dtype будет отражать возвращаемое значение переданной
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иметьg2имеют две группы,aиb, и отличаются только своимиgroup_keysаргумент. Вызов apply различными способами, мы можем получить разные результаты группировки:Пример 1: Функция, переданная в apply принимает Series в качестве аргумента и возвращает Series. apply объединяет результат для каждой группы в новую Series.
Изменено в версии 1.3.0: Результирующий dtype будет отражать возвращаемое значение переданной
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
The
group_keysаргумент не имеет эффекта здесь, потому что результат не похож на индекс (т.е. преобразование) при сравнении с входными данными.>>> g2.apply(lambda x: x.max() - x.min()) a 1 b 0 dtype: int64