Pandas
1 min read
Updated 4 Aug 2026
12. MultiIndex (hierarchical index)
idx = pd.MultiIndex.fromtuples(
idx = pd.MultiIndex.from_tuples(
[('Eng','M'),('Eng','F'),('Sales','M')],
names=['dept','gender'])
s = pd.Series([90, 85, 60], index=idx)
s['Eng'] # all Eng rows
s.loc[('Eng','F')] # single value
s.loc[('Eng',):('Sales',)]
df.set_index(['dept','gender']) # create MultiIndex
df.sort_index() # required for efficient slicing
df.reset_index() # flatten back to columns
s.xs('M', level='gender') # cross-section by a level
| Operation | Method |
|---|---|
| Create | set_index([...]), MultiIndex.from_* |
| Select | loc[(a,b)], xs(key, level=) |
| Sort | sort_index() (needed for slicing) |
| Reset | reset_index() |
⚠️ Common Mistake: Slicing an unsorted MultiIndex raises
UnsortedIndexError. Calldf.sort_index()first.
⭐ Interview Question: What is a MultiIndex used for? Representing higher-dimensional data in a 2-D frame — e.g. (dept, gender) rows — enabling grouped selection and easy pivot/stack operations.