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