Spec-Zone.ru › pandas 0.23

pandas.core.groupby.GroupBy.apply

GroupBy.apply(func, *args, **kwargs) [source]

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

Функция, переданная в apply, должна принимать в качестве первого аргумента фрейм данных и возвращать фрейм данных, ряд или скаляр. apply затем позаботится об объединении результатов в единый фрейм данных или ряд. apply поэтому является очень гибким методом группировки.

Хотя apply является очень гибким методом, его недостатком является то, что его использование может быть значительно медленнее, чем использование более специфичных методов. Pandas предлагает широкий спектр методов, которые будут намного быстрее, чем использование apply для их конкретных целей, поэтому постарайтесь использовать их перед применением apply.

Параметры:

func : функция

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

args, kwargs : кортеж и словарь

Необязательные позиционные и ключевые аргументы для передачи в func

Возвращает:
applied : Series or DataFrame

См. также

pipe
Применить функцию ко всему объекту GroupBy вместо каждой группы.

aggregate, transform

Примечания

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

Примеры

>>> df = pd.DataFrame({'A': 'a a b'.split(), 'B': [1,2,3], 'C': [4,6, 5]})
>>> g = df.groupby('A')

Из df выше видно, что g имеет две группы, a, b. Вызывая apply различными способами, мы можем получить разные результаты группировки:

Пример 1: ниже функция, переданная в apply, принимает фрейм данных в качестве аргумента и возвращает фрейм данных. apply объединяет результат для каждой группы вместе в новый фрейм данных:

>>> g.apply(lambda x: x / x.sum())
          B    C
0  0.333333  0.4
1  0.666667  0.6
2  1.000000  1.0

Пример 2: Функция, переданная в apply, принимает фрейм данных в качестве аргумента и возвращает ряд. apply объединяет результаты для каждой группы вместе в новый фрейм данных:

>>> g.apply(lambda x: x.max() - x.min())
   B  C
A
a  1  2
b  0  0

Пример 3: Функция, переданная в apply, принимает фрейм данных в качестве аргумента и возвращает скаляр. apply объединяет результаты для каждой группы вместе в ряд, включая установку индекса как положено:

>>> g.apply(lambda x: x.C.max() - x.B.min())
A
a    5
b    2
dtype: int64

© 2008–2012, 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/0.23.4/generated/pandas.core.groupby.GroupBy.apply.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API