Skip to main content
`Ctrl`+`K`

# pandas.api.typing.SeriesGroupBy.aggregate

SeriesGroupBy.aggregate(func=None, *args, engine=None, engine_kwargs=None, **kwargs)

  Aggregate using one or more operations.

  The `aggregate` method enables flexible and efficient aggregation of grouped data using a variety of functions, including built-in, user-defined, and optimized JIT-compiled functions.

  Parameters:
    func function, str, list or None

      Function to use for aggregating the data. If a function, must either work when passed a Series or when passed to Series.apply.

      Accepted combinations are:

      - function

      - string function name

      - list of functions and/or function names, e.g. `[np.sum, 'mean']`

      - None, in which case `**kwargs` are used with Named Aggregation. Here the output has one column for each element in `**kwargs`. The name of the column is keyword, whereas the value determines the aggregation used to compute the values in the column.

        Can also accept a Numba JIT function with `engine='numba'` specified. Only passing a single function is supported with this engine.

        If the `'numba'` engine is chosen, the function must be a user defined function with `values` and `index` as the first and second arguments respectively in the function signature. Each group’s index will be passed to the user defined function and optionally available for use.

    *args

      Positional arguments to pass to func.

    engine str, default None

      - `'cython'` : Runs the function through C-extensions from cython.

      - `'numba'` : Runs the function through JIT compiled code from numba.

      - `None` Defaults to `'cython'` or globally setting

          `compute.use_numba`

    engine_kwargs dict, default None

      - For `'cython'` engine, there are no accepted `engine_kwargs`

      - For `'numba'` engine, the engine can accept `nopython`, `nogil` and `parallel` dictionary keys. The values must either be `True` or `False`. The default `engine_kwargs` for the `'numba'` engine is `{'nopython': True, 'nogil': False, 'parallel': False}` and will be applied to the function

    **kwargs

      - If `func` is None, `**kwargs` are used to define the output names and aggregations via Named Aggregation. See `func` entry.

      - Otherwise, keyword arguments to be passed into func.

  Returns:
    Series

      Aggregated Series based on the grouping and the applied aggregation functions.

  See also

  `SeriesGroupBy.apply`

    Apply function func group-wise and combine the results together.

  `SeriesGroupBy.transform`

    Transforms the Series on each group based on the given function.

  `Series.aggregate`

    Aggregate using one or more operations.

  Notes

  When using `engine='numba'`, there will be no “fall back” behavior internally. The group data and group index will be passed as numpy arrays to the JITed user defined function, and no alternative execution attempts will be tried.

  Functions that mutate the passed object can produce unexpected behavior or errors and are not supported. See Mutating with User Defined Function (UDF) methods for more details.

  The resulting dtype will reflect the return value of the passed `func`, see the examples below.

  Examples

      >>> s = pd.Series([1, 2, 3, 4])

      >>> s
      0    1
      1    2
      2    3
      3    4
      dtype: int64

      >>> s.groupby([1, 1, 2, 2]).min()
      1    1
      2    3
      dtype: int64

      >>> s.groupby([1, 1, 2, 2]).agg("min")
      1    1
      2    3
      dtype: int64

      >>> s.groupby([1, 1, 2, 2]).agg(["min", "max"])
         min  max
      1    1    2
      2    3    4

  The output column names can be controlled by passing the desired column names and aggregations as keyword arguments.

      >>> s.groupby([1, 1, 2, 2]).agg(
      ...     minimum="min",
      ...     maximum="max",
      ... )
         minimum  maximum
      1        1        2
      2        3        4

  The resulting dtype will reflect the return value of the aggregating function.

      >>> s.groupby([1, 1, 2, 2]).agg(lambda x: x.astype(float).min())
      1    1.0
      2    3.0
      dtype: float64