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