8️⃣ ⛓️ Pandas Advanced Indexing – MultiIndex
Estimated reading: 3 minutes 342 views

Pandas Sorting a MultiIndex – Order Multi-Level Indexes Effectively


Introduction – Why Sort a MultiIndex?

When working with MultiIndex DataFrames, sorting becomes essential for:

  • Consistent display
  • Efficient lookups
  • Correct grouping and slicing

By default, Pandas may not sort a MultiIndex after creation or manipulation. To maintain readability and performance, use sort_index() and sort_values() with MultiIndex-aware options.

In this guide, you’ll learn:

  • Sort MultiIndex rows and columns using sort_index()
  • Sort by one or more levels
  • Control sort order (ascending/descending)
  • Use sort_values() to sort by data while respecting index

1. Create a MultiIndex DataFrame

import pandas as pd

index = pd.MultiIndex.from_tuples([
    ('HR', 2023),
    ('IT', 2022),
    ('HR', 2022),
    ('Finance', 2023),
    ('Finance', 2022)
], names=['Department', 'Year'])

df = pd.DataFrame({'Budget': [500, 600, 450, 700, 650]}, index=index)

Output:

                  Budget
Department Year         
HR         2023      500
IT         2022      600
HR         2022      450
Finance    2023      700
Finance    2022      650

2. Sort MultiIndex Rows by All Levels

df_sorted = df.sort_index()

Output:

                  Budget
Department Year         
Finance    2022     650
           2023     700
HR         2022     450
           2023     500
IT         2022     600

✔️ Sorts by ‘Department’ and then by ‘Year’.


3. Sort by Specific Level(s)

df.sort_index(level='Year')  # Sort only by 'Year'
df.sort_index(level=['Year', 'Department'], ascending=[True, False])

✔️ You can control sort hierarchy and direction per level.


4. Sort in Descending Order

df.sort_index(ascending=False)

✔️ Reverses sort order across all index levels.


5. Sort by Column Values Instead of Index

df.sort_values(by='Budget')

✔️ Orders rows by data in the 'Budget' column, ignores index order.


6. Sort MultiIndex Columns (if present)

# Example with MultiIndex columns
columns = pd.MultiIndex.from_tuples([('2023', 'Q1'), ('2022', 'Q4')])
df_col = pd.DataFrame([[100, 90], [110, 95]], columns=columns)

df_col.sort_index(axis=1)

✔️ Sorts column MultiIndex in hierarchical order.


Summary – Key Takeaways

Sorting a MultiIndex ensures your data is well-structured and performant. It helps with lookups, comparisons, slicing, and visual consistency.

Key Takeaways:

  • Use sort_index() to sort rows or columns by index levels
  • Use level and ascending to customize sort rules
  • Use sort_values() to sort by column data, not index
  • Applicable to both row and column MultiIndexes

Real-world relevance: Essential for financial reports, grouped summaries, pivot tables, and multi-dimensional datasets.


FAQs – Sorting MultiIndex in Pandas

Does Pandas automatically sort MultiIndex after groupby?
No. You may need to use sort_index() manually afterward.


Can I sort one level ascending and another descending?
Yes:

df.sort_index(level=['Department', 'Year'], ascending=[True, False])

How do I sort by column values when using MultiIndex?
Use:

df.sort_values(by='YourColumnName')

Does sorting improve performance?
Yes, especially when performing slicing, lookups, and joins on MultiIndexed DataFrames.


Can I sort MultiIndex columns like rows?
Yes, use:

df.sort_index(axis=1)

Share Now :
Share

Pandas Sorting a MultiIndex

Or Copy Link

CONTENTS
Scroll to Top