Python Pandas - Return MultiIndex with multiple levels removed using the level names

To return MultiIndex with multiple levels removed using the level names, use the MultiIndex.droplevel() method and set the multiple levels (level name) to be removed as arguments.

Syntax

MultiIndex.droplevel(level)

Where level can be a single level name/number or a list of level names/numbers to drop.

Creating a MultiIndex

First, let's create a MultiIndex with multiple levels using from_arrays() ?

import pandas as pd

# Create arrays for different levels
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]

# Create MultiIndex with named levels
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))

# Display the MultiIndex
print("The Multi-index...")
print(multiIndex)
The Multi-index...
MultiIndex([(2, 'Peter', 50),
            (4, 'Chris', 30),
            (3,  'Andy', 40),
            (1, 'Jacob', 70)],
           names=['rank', 'student', 'points'])

Dropping Multiple Levels by Name

Use droplevel() with a list of level names to remove multiple levels simultaneously ?

import pandas as pd

# Create MultiIndex
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))

print("Original MultiIndex:")
print(multiIndex)

# Drop two levels by name
result = multiIndex.droplevel(['rank', 'student'])
print("\nAfter dropping 'rank' and 'student' levels:")
print(result)
Original MultiIndex:
MultiIndex([(2, 'Peter', 50),
            (4, 'Chris', 30),
            (3,  'Andy', 40),
            (1, 'Jacob', 70)],
           names=['rank', 'student', 'points'])

After dropping 'rank' and 'student' levels:
Index([50, 30, 40, 70], dtype='int64', name='points')

Dropping Different Level Combinations

You can drop different combinations of levels as needed ?

import pandas as pd

arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))

# Drop only the middle level
result1 = multiIndex.droplevel(['student'])
print("Dropping 'student' level:")
print(result1)

# Drop first and last levels
result2 = multiIndex.droplevel(['rank', 'points'])
print("\nDropping 'rank' and 'points' levels:")
print(result2)
Dropping 'student' level:
MultiIndex([(2, 50),
            (4, 30),
            (3, 40),
            (1, 70)],
           names=['rank', 'points'])

Dropping 'rank' and 'points' levels:
Index(['Peter', 'Chris', 'Andy', 'Jacob'], dtype='object', name='student')

Conclusion

The droplevel() method allows you to remove multiple levels from a MultiIndex by specifying level names in a list. This is useful for simplifying hierarchical indexes and focusing on specific dimensions of your data.

Updated on: 2026-03-26T17:23:20+05:30

215 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements