Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Selected Reading
Python Pandas - Rearrange levels using level name in MultiIndex
To rearrange levels using level name in MultiIndex, use the MultiIndex.reorder_levels() method in Pandas. This method allows you to reorder the hierarchy of index levels by specifying level names in your desired order.
Creating a MultiIndex
First, let's create a MultiIndex with three levels ?
import pandas as pd
# Create arrays for MultiIndex
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'))
print("Original MultiIndex:")
print(multiIndex)
Original MultiIndex:
MultiIndex([(2, 'Peter', 50),
(4, 'Chris', 30),
(3, 'Andy', 40),
(1, 'Jacob', 70)],
names=['rank', 'student', 'points'])
Reordering Levels by Name
Use reorder_levels() with the order parameter to specify the new level arrangement ?
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'))
# Reorder levels: student first, then rank, then points
reordered = multiIndex.reorder_levels(order=['student', 'rank', 'points'])
print("Reordered MultiIndex (student, rank, points):")
print(reordered)
Reordered MultiIndex (student, rank, points):
MultiIndex([('Peter', 2, 50),
('Chris', 4, 30),
( 'Andy', 3, 40),
('Jacob', 1, 70)],
names=['student', 'rank', 'points'])
Different Ordering Examples
You can arrange levels in any order you need ?
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'))
# Order: points first, then student, then rank
points_first = multiIndex.reorder_levels(order=['points', 'student', 'rank'])
print("Points first ordering:")
print(points_first)
print("\n" + "="*50 + "\n")
# Order: student, points, rank
student_points = multiIndex.reorder_levels(order=['student', 'points', 'rank'])
print("Student-points-rank ordering:")
print(student_points)
Points first ordering:
MultiIndex([(50, 'Peter', 2),
(30, 'Chris', 4),
(40, 'Andy', 3),
(70, 'Jacob', 1)],
names=['points', 'student', 'rank'])
==================================================
Student-points-rank ordering:
MultiIndex([('Peter', 50, 2),
('Chris', 30, 4),
( 'Andy', 40, 3),
('Jacob', 70, 1)],
names=['student', 'points', 'rank'])
Key Points
- The
orderparameter takes a list of level names in the desired sequence - All level names must be specified in the order list
- The method returns a new MultiIndex with reordered levels
- Original MultiIndex remains unchanged
Conclusion
Use MultiIndex.reorder_levels() to rearrange the hierarchy of index levels by specifying level names in your desired order. This is useful for changing the grouping structure of hierarchical data without modifying the underlying data values.
Advertisements
