Skip to main content

__ Back to top

__ ` Ctrl ` \+ ` K `

[ ![pandas 2.2.1 documentation - Home](../_static/pandas.svg) ](../index.html)

Site Navigation

  * [ Getting started ](../getting_started/index.html)
  * [ User Guide ](index.html)
  * [ API reference ](../reference/index.html)
  * [ Development ](../development/index.html)
  * [ Release notes ](../whatsnew/index.html)

  * [ __ GitHub  ](https://github.com/pandas-dev/pandas "GitHub")
  * [ __ Twitter  ](https://twitter.com/pandas_dev "Twitter")
  * [ __ Mastodon  ](https://fosstodon.org/@pandas_dev "Mastodon")

Site Navigation

  * [ Getting started ](../getting_started/index.html)
  * [ User Guide ](index.html)
  * [ API reference ](../reference/index.html)
  * [ Development ](../development/index.html)
  * [ Release notes ](../whatsnew/index.html)

  * [ __ GitHub  ](https://github.com/pandas-dev/pandas "GitHub")
  * [ __ Twitter  ](https://twitter.com/pandas_dev "Twitter")
  * [ __ Mastodon  ](https://fosstodon.org/@pandas_dev "Mastodon")

  * [ 10 minutes to pandas ](10min.html)
  * [ Intro to data structures ](dsintro.html)
  * [ Essential basic functionality ](basics.html)
  * [ IO tools (text, CSV, HDF5, â¦) ](io.html)
  * [ PyArrow Functionality ](pyarrow.html)
  * [ Indexing and selecting data ](indexing.html)
  * [ MultiIndex / advanced indexing ](advanced.html)
  * [ Copy-on-Write (CoW) ](copy_on_write.html)
  * [ Merge, join, concatenate and compare ](merging.html)
  * [ Reshaping and pivot tables ](reshaping.html)
  * [ Working with text data ](text.html)
  * [ Working with missing data ](missing_data.html)
  * [ Duplicate Labels ](duplicates.html)
  * [ Categorical data ](categorical.html)
  * [ Nullable integer data type ](integer_na.html)
  * [ Nullable Boolean data type ](boolean.html)
  * [ Chart visualization ](visualization.html)
  * [ Table Visualization ](style.html)
  * Group by: split-apply-combine 
  * [ Windowing operations ](window.html)
  * [ Time series / date functionality ](timeseries.html)
  * [ Time deltas ](timedeltas.html)
  * [ Options and settings ](options.html)
  * [ Enhancing performance ](enhancingperf.html)
  * [ Scaling to large datasets ](scale.html)
  * [ Sparse data structures ](sparse.html)
  * [ Frequently Asked Questions (FAQ) ](gotchas.html)
  * [ Cookbook ](cookbook.html)

  * [ __ ](../index.html)
  * [ User Guide ](index.html)
  * Group by:... 

#  Group by: split-apply-combine  #

By âgroup byâ we are referring to a process involving one or more of the
following steps:

  * **Splitting** the data into groups based on some criteria. 

  * **Applying** a function to each group independently. 

  * **Combining** the results into a data structure. 

Out of these, the split step is the most straightforward. In the apply step,
we might wish to do one of the following:

  * **Aggregation** : compute a summary statistic (or statistics) for each group. Some examples: 

>     * Compute group sums or means.
>
>     * Compute group sizes / counts.

  * **Transformation** : perform some group-specific computations and return a like-indexed object. Some examples: 

>     * Standardize data (zscore) within a group.
>
>     * Filling NAs within groups with a value derived from each group.

  * **Filtration** : discard some groups, according to a group-wise computation that evaluates to True or False. Some examples: 

>     * Discard data that belong to groups with only a few members.
>
>     * Filter out data based on the group sum or mean.

Many of these operations are defined on GroupBy objects. These operations are
similar to those of the [ aggregating API  ](basics.html#basics-aggregate) , [
window API  ](window.html#window-overview) , and [ resample API
](timeseries.html#timeseries-aggregate) .

It is possible that a given operation does not fall into one of these
categories or is some combination of them. In such a case, it may be possible
to compute the operation using GroupByâs ` apply  ` method. This method will