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 вместо каждой группы.
Примечания
В текущей реализации
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