Spec-Zone.ru › pandas 0.21

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

Spec-Zone.ru

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