janitor.collapse_levels(df: pandas.core.frame.DataFrame, sep: str = '_') → pandas.core.frame.DataFrame[source]

Flatten multi-level column dataframe to a single level.

This method mutates the original DataFrame.

Given a DataFrame containing multi-level columns, flatten to single- level by string-joining the column labels in each level.

After a groupby / aggregate operation where .agg() is passed a list of multiple aggregation functions, a multi-level DataFrame is returned with the name of the function applied in the second level.

It is sometimes convenient for later indexing to flatten out this multi-level configuration back into a single level. This function does this through a simple string-joining of all the names across different levels in a single column.

Method chaining syntax given two value columns [‘max_speed’, ‘type’]:

data = {"class": ["bird", "bird", "bird", "mammal", "mammal"],
        "max_speed": [389, 389, 24, 80, 21],
        "type": ["falcon", "falcon", "parrot", "Lion", "Monkey"]}

df = (
        .agg(['mean', 'median'])

Before applying .collapse_levels, the .agg operation returns a multi-level column DataFrame whose columns are (level 1, level 2):

[('class', ''), ('max_speed', 'mean'), ('max_speed', 'median'),
('type', 'mean'), ('type', 'median')]

.collapse_levels then flattens the column names to:

['class', 'max_speed_mean', 'max_speed_median',
'type_mean', 'type_median']
  • df – A pandas DataFrame.

  • sep – String separator used to join the column level names


A flattened pandas DataFrame.