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