pandas.MultiIndex.set_levels#

MultiIndex.set_levels(levels, *, level=None, verify_integrity=True)[source] #

Set new levels on MultiIndex. Defaults to returning new index.

Parameters:
levelssequence or list of sequence

New level(s) to apply.

levelint, level name, or sequence of int/level names (default None)

Level(s) to set (None for all levels).

verify_integritybool, default True

If True, checks that levels and codes are compatible.

Returns:
MultiIndex

Examples

>>> idx = pd.MultiIndex.from_tuples(
...  [
...  (1, "one"),
...  (1, "two"),
...  (2, "one"),
...  (2, "two"),
...  (3, "one"),
...  (3, "two")
...  ],
...  names=["foo", "bar"]
... )
>>> idx
MultiIndex([(1, 'one'),
 (1, 'two'),
 (2, 'one'),
 (2, 'two'),
 (3, 'one'),
 (3, 'two')],
 names=['foo', 'bar'])
>>> idx.set_levels([['a', 'b', 'c'], [1, 2]])
MultiIndex([('a', 1),
 ('a', 2),
 ('b', 1),
 ('b', 2),
 ('c', 1),
 ('c', 2)],
 names=['foo', 'bar'])
>>> idx.set_levels(['a', 'b', 'c'], level=0)
MultiIndex([('a', 'one'),
 ('a', 'two'),
 ('b', 'one'),
 ('b', 'two'),
 ('c', 'one'),
 ('c', 'two')],
 names=['foo', 'bar'])
>>> idx.set_levels(['a', 'b'], level='bar')
MultiIndex([(1, 'a'),
 (1, 'b'),
 (2, 'a'),
 (2, 'b'),
 (3, 'a'),
 (3, 'b')],
 names=['foo', 'bar'])

If any of the levels passed to set_levels() exceeds the existing length, all of the values from that argument will be stored in the MultiIndex levels, though the values will be truncated in the MultiIndex output.

>>> idx.set_levels([['a', 'b', 'c'], [1, 2, 3, 4]], level=[0, 1])
MultiIndex([('a', 1),
 ('a', 2),
 ('b', 1),
 ('b', 2),
 ('c', 1),
 ('c', 2)],
 names=['foo', 'bar'])
>>> idx.set_levels([['a', 'b', 'c'], [1, 2, 3, 4]], level=[0, 1]).levels
FrozenList([['a', 'b', 'c'], [1, 2, 3, 4]])