РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
358 of 687 menu

Метод apply

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

Синтаксис

grouped.apply(func, *args, **kwargs)

Пример

Давайте применим функцию для вычисления размаха значений в каждой группе:

import pandas as pd df = pd.DataFrame({ 'a': [1, 1, 2, 2, 3], 'b': [10, 20, 30, 40, 50] }) grouped = df.groupby('a') res = grouped.apply(lambda x: x['b'].max() - x['b'].min()) print(res)

Результат выполнения кода:

a 1 10 2 10 3 0 dtype: int64

Пример

Давайте применим функцию, которая возвращает DataFrame для каждой группы:

import pandas as pd df = pd.DataFrame({ 'a': [1, 1, 2, 2, 3], 'b': [10, 20, 30, 40, 50], 'c': [100, 200, 300, 400, 500] }) grouped = df.groupby('a') def normalize_group(group): return (group - group.min()) / (group.max() - group.min()) res = grouped.apply(normalize_group) print(res)

Результат выполнения кода:

b c 0 0.0 0.0 1 1.0 1.0 2 0.0 0.0 3 1.0 1.0 4 0.0 0.0

Пример

Давайте применим функцию, которая возвращает дополнительную статистику для каждой группы:

import pandas as pd df = pd.DataFrame({ 'a': ['x', 'x', 'y', 'y', 'z'], 'b': [1, 2, 3, 4, 5], 'c': [10, 20, 30, 40, 50] }) grouped = df.groupby('a') def stats(group): return pd.DataFrame({ 'count': [len(group)], 'mean_b': [group['b'].mean()], 'mean_c': [group['c'].mean()] }) res = grouped.apply(stats) print(res)

Результат выполнения кода:

count mean_b mean_c a x 0 2 1.5 15.0 y 0 2 3.5 35.0 z 0 1 5.0 50.0

Пример

Давайте передадим дополнительные аргументы в функцию apply:

import pandas as pd df = pd.DataFrame({ 'a': [1, 1, 2, 2, 3], 'b': [10, 20, 30, 40, 50] }) grouped = df.groupby('a') def add_value(group, value): return group + value res = grouped.apply(add_value, value=10) print(res)

Результат выполнения кода:

a b 0 11 20 1 11 30 2 12 40 3 12 50 4 13 60

Смотрите также

  • метод agg,
    который применяет агрегирующие функции к группам
  • метод transform,
    который применяет функцию к каждой группе и возвращает объект с той же размерностью
  • метод filter,
    который фильтрует группы по заданному условию
  • метод groupby,
    который создает объект для группировки данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить