pandas.core.groupby.DataFrameGroupBy.agg#

DataFrameGroupBy.agg(функция=None, *args, движок=None, engine_kwargs=None, **kwargs)[источник]#

Агрегировать с использованием одной или нескольких операций по указанной оси.

Параметры:
функцияфункция, строка, список, словарь или None

Функция для агрегирования данных. Если это функция, она должна работать либо при передаче DataFrame, либо при передаче в DataFrame.apply.

Допустимые комбинации:

  • функция

  • имя строковой функции

  • список функций и/или имён функций, например [np.sum, 'mean']

  • словарь меток осей -> функции, имена функций или список таких.

  • None, в этом случае **kwargs используются с именованной агрегацией. Здесь выходные данные имеют один столбец для каждого элемента в **kwargs. Имя столбца — это ключевое слово, а значение определяет агрегацию, используемую для вычисления значений в столбце.

    Также может принимать функцию Numba JIT с engine='numba' указан. Только передача одной функции поддерживается этим движком.

    Если 'numba' выбран механизм, функция должна быть пользовательской функцией с values и index как первый и второй аргументы соответственно в сигнатуре функции. Индекс каждой группы будет передан пользовательской функции и при необходимости доступен для использования.

*args

Позиционные аргументы для передачи в func.

движокstr, по умолчанию None
  • 'cython' : Запускает функцию через C-расширения из cython.

  • 'numba' : Запускает функцию через JIT-скомпилированный код из numba.

  • None : По умолчанию 'cython' или глобальная установка compute.use_numba

engine_kwargsdict, по умолчанию None
  • Для 'cython' движок, нет принятых engine_kwargs

  • Для 'numba' движок, движок может принимать nopython, nogil и parallel ключи словаря. Значения должны быть либо True или False. По умолчанию engine_kwargs для 'numba' движок это {'nopython': True, 'nogil': False, 'parallel': False} и будет применена к функции

**kwargs
  • Если func равно None, **kwargs используются для определения выходных имён и агрегаций через Named Aggregation. См. func запись.

  • В противном случае, ключевые аргументы для передачи в func.

Возвращает:
DataFrame

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

DataFrame.groupby.apply

Применить функцию func по группам и объединить результаты.

DataFrame.groupby.transform

Преобразует Series в каждой группе на основе заданной функции.

DataFrame.aggregate

Агрегировать с использованием одной или нескольких операций по указанной оси.

Примечания

При использовании engine='numba', не будет внутреннего поведения "отката". Данные группы и индекс группы будут переданы как массивы numpy в JIT-компилированную пользовательскую функцию, и не будет предпринято попыток альтернативного выполнения.

Функции, изменяющие переданный объект, могут вызывать неожиданное поведение или ошибки и не поддерживаются. См. Изменение с помощью методов пользовательских функций (UDF) для получения дополнительной информации.

Изменено в версии 1.3.0: Результирующий dtype будет отражать возвращаемое значение переданной func, см. примеры ниже.

Примеры

>>> data = {"A": [1, 1, 2, 2],
...         "B": [1, 2, 3, 4],
...         "C": [0.362838, 0.227877, 1.267767, -0.562860]}
>>> df = pd.DataFrame(data)
>>> df
   A  B         C
0  1  1  0.362838
1  1  2  0.227877
2  2  3  1.267767
3  2  4 -0.562860

Агрегация выполняется для каждого столбца.

>>> df.groupby('A').agg('min')
   B         C
A
1  1  0.227877
2  3 -0.562860

Множественные агрегации

>>> df.groupby('A').agg(['min', 'max'])
    B             C
  min max       min       max
A
1   1   2  0.227877  0.362838
2   3   4 -0.562860  1.267767

Выберите столбец для агрегации

>>> df.groupby('A').B.agg(['min', 'max'])
   min  max
A
1    1    2
2    3    4

Пользовательская функция для агрегации

>>> df.groupby('A').agg(lambda x: sum(x) + 2)
    B          C
A
1       5       2.590715
2       9       2.704907

Разные агрегации по столбцам

>>> df.groupby('A').agg({'B': ['min', 'max'], 'C': 'sum'})
    B             C
  min max       sum
A
1   1   2  0.590715
2   3   4  0.704907

Для управления именами выходных данных с разными агрегациями по столбцам, pandas поддерживает "именованную агрегацию"

>>> df.groupby("A").agg(
...     b_min=pd.NamedAgg(column="B", aggfunc="min"),
...     c_sum=pd.NamedAgg(column="C", aggfunc="sum")
... )
   b_min     c_sum
A
1      1  0.590715
2      3  0.704907
  • Ключевые слова - это вывод имена столбцов

  • Значения являются кортежами, первый элемент которых — столбец для выбора, а второй — агрегация для применения к этому столбцу. Pandas предоставляет pandas.NamedAgg namedtuple с полями ['column', 'aggfunc'] чтобы сделать аргументы более понятными. Как обычно, агрегация может быть вызываемым объектом или строковым псевдонимом.

См. Именованная агрегация подробнее.

Изменено в версии 1.3.0: Результирующий dtype будет отражать возвращаемое значение агрегирующей функции.

>>> df.groupby("A")[["B"]].agg(lambda x: x.astype(float).min())
      B
A
1   1.0
2   3.0