Spec-Zone.ru › pandas 0.22

pandas.core.groupby.GroupBy.apply

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

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

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

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

Параметры:

func : функция

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

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

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

Возвращает:

applied : Ряд или фрейм данных

См. также

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

aggregate, transform

Примечания

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

Примеры

>>> 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.22.0/generated/pandas.core.groupby.GroupBy.apply.html

Spec-Zone.ru

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