pandas.MultiIndex.remove_unused_levels#

MultiIndex.remove_unused_levels()[source]#

Create new MultiIndex from current that removes unused levels.

Unused level(s) means levels that are not expressed in the labels. The resulting MultiIndex will have the same outward appearance, meaning the same .values and ordering. It will also be .equals() to the original.

The remove_unused_levels method is useful in cases where you have a MultiIndex with hierarchical levels, but some of these levels are no longer needed due to filtering or subsetting operations. By removing the unused levels, the resulting MultiIndex becomes more compact and efficient, which can improve performance in subsequent operations.

Returns:
MultiIndex

A new MultiIndex with unused levels removed.

See also

MultiIndex.droplevel

Remove specified levels from a MultiIndex.

MultiIndex.reorder_levels

Rearrange levels of a MultiIndex.

MultiIndex.set_levels

Set new levels on a MultiIndex.

Examples

>>> mi = pd.MultiIndex.from_product([range(2), list("ab")])
>>> mi
MultiIndex([(0, 'a'),
            (0, 'b'),
            (1, 'a'),
            (1, 'b')],
           )
>>> mi[2:]
MultiIndex([(1, 'a'),
            (1, 'b')],
           )

The 0 from the first level is not represented and can be removed

>>> mi2 = mi[2:].remove_unused_levels()
>>> mi2.levels
FrozenList([[1], ['a', 'b']])