Search code examples
pythonpandas

Group a multi-indexed pandas dataframe by one of its levels?


Is it possible to groupby a multi-index (2 levels) pandas dataframe by one of the multi-index levels ?

The only way I know of doing it is to reset_index on a multiindex and then set index again. I am sure there is a better way to do it, and I want to know how.


Solution

  • Yes, use the level parameter of the groupby method. Take a look here. Example:

    In [26]: s
    
    first  second  third
    bar    doo     one      0.404705
                   two      0.577046
    baz    bee     one     -1.715002
                   two     -1.039268
    foo    bop     one     -0.370647
                   two     -1.157892
    qux    bop     one     -1.344312
                   two      0.844885
    dtype: float64
    
    In [27]: s.groupby(level=['first','second']).sum()
    
    first  second
    bar    doo       0.981751
    baz    bee      -2.754270
    foo    bop      -1.528539
    qux    bop      -0.499427
    dtype: float64