Using swaplevel() method, we can swap the index levels in a multi index data frame.
Let’s use below data set to demonstrate the examples.
Name Age City Gender Rating 0 Krishna 34 Bangalore Male 39 1 Sailu 35 Hyderabad Female 43 2 Joel 29 Hyderabad Male 67 3 Chamu 35 Chennai Female 100 4 Jitendra 52 Bangalore Male 41 5 Krishna 34 Chennai Male 89
Let’s create a multi index on City and Gender columns.
df.set_index(['City', 'Gender'], inplace=True)
After executing the above statement, a multi index on the columns 'City' and 'Gender' is created on dataset.
Name Age Rating City Gender Bangalore Male Krishna 34 39 Hyderabad Female Sailu 35 43 Male Joel 29 67 Chennai Female Chamu 35 100 Bangalore Male Jitendra 52 41 Chennai Male Krishna 34 89
Let’s swap the outer index level City with the inner index level Gender by calling swaplevel method.
df = df.swaplevel()
After executing the above statement, dataset looks like below.
Name Age Rating Gender City Male Bangalore Krishna 34 39 Female Hyderabad Sailu 35 43 Male Hyderabad Joel 29 67 Female Chennai Chamu 35 100 Male Bangalore Jitendra 52 41 Chennai Krishna 34 89
As you observe above snippet, Outer most level is changed to Gender now.
Find the below working application.
swap_levels.py
import pandas as pd
# Create a sample DataFrame
data = {'Name': ['Krishna', 'Sailu', 'Joel', 'Chamu', 'Jitendra', "Krishna"],
'Age': [34, 35, 29, 35, 52, 34],
'City': ['Bangalore', 'Hyderabad', 'Hyderabad', 'Chennai', 'Bangalore', 'Chennai'],
'Gender': ['Male', 'Female', 'Male', 'Female', 'Male', 'Male'],
'Rating': [39, 43, 67, 100, 41, 89]}
df = pd.DataFrame(data)
print('Original DataFrame')
print(df)
df.set_index(['City', 'Gender'], inplace=True)
print('\nDataframe after setting the indexes\n', df)
df = df.swaplevel()
print('\nAfter swapping index levels City and Gender\n', df)
Output
Original DataFrame
Name Age City Gender Rating
0 Krishna 34 Bangalore Male 39
1 Sailu 35 Hyderabad Female 43
2 Joel 29 Hyderabad Male 67
3 Chamu 35 Chennai Female 100
4 Jitendra 52 Bangalore Male 41
5 Krishna 34 Chennai Male 89
Dataframe after setting the indexes
Name Age Rating
City Gender
Bangalore Male Krishna 34 39
Hyderabad Female Sailu 35 43
Male Joel 29 67
Chennai Female Chamu 35 100
Bangalore Male Jitendra 52 41
Chennai Male Krishna 34 89
After swapping index levels City and Gender
Name Age Rating
Gender City
Male Bangalore Krishna 34 39
Female Hyderabad Sailu 35 43
Male Hyderabad Joel 29 67
Female Chennai Chamu 35 100
Male Bangalore Jitendra 52 41
Chennai Krishna 34 89
‘swaplevel()’ method will work perfectly fine when you have a multi index with two columns. But if you have a multi index with more than 2 columns, then you should explicitly specify the columns that you want to swap.
For example, I have a data set with the columns City, Gender and Age
Name Rating City Gender Age Bangalore Male 34 Krishna 39 Hyderabad Female 35 Sailu 43 Male 29 Joel 67 Chennai Female 35 Chamu 100 Bangalore Male 52 Jitendra 41 Chennai Male 34 Krishna 89
Now I want to swap the levels Gender and Age levels. To do that I can specify the level labels explicitly.
df = df.swaplevel('Gender', 'Age')
Above snippet transforms the data set like below.
Name Rating City Age Gender Bangalore 34 Male Krishna 39 Hyderabad 35 Female Sailu 43 29 Male Joel 67 Chennai 35 Female Chamu 100 Bangalore 52 Male Jitendra 41 Chennai 34 Male Krishna 89
You can even swap the indexes in a multi index by specifying their positions. For example, following snippet swap City and Gender indexes using index positions.
df = df.swaplevel(0, 2)
Find the below working application.
swap_levels_specify_labels.py
import pandas as pd
# Create a sample DataFrame
data = {'Name': ['Krishna', 'Sailu', 'Joel', 'Chamu', 'Jitendra', "Krishna"],
'Age': [34, 35, 29, 35, 52, 34],
'City': ['Bangalore', 'Hyderabad', 'Hyderabad', 'Chennai', 'Bangalore', 'Chennai'],
'Gender': ['Male', 'Female', 'Male', 'Female', 'Male', 'Male'],
'Rating': [39, 43, 67, 100, 41, 89]}
df = pd.DataFrame(data)
print('Original DataFrame')
print(df)
df.set_index(['City', 'Gender', 'Age'], inplace=True)
print('\nDataframe after setting the indexes\n', df)
df = df.swaplevel('Gender', 'Age')
print('\nAfter swapping index levels Gender and Age\n', df)
df = df.swaplevel(0, 2)
print('\nAfter swapping index levels City and Gender\n', df)
Output
Original DataFrame Name Age City Gender Rating 0 Krishna 34 Bangalore Male 39 1 Sailu 35 Hyderabad Female 43 2 Joel 29 Hyderabad Male 67 3 Chamu 35 Chennai Female 100 4 Jitendra 52 Bangalore Male 41 5 Krishna 34 Chennai Male 89 Dataframe after setting the indexes Name Rating City Gender Age Bangalore Male 34 Krishna 39 Hyderabad Female 35 Sailu 43 Male 29 Joel 67 Chennai Female 35 Chamu 100 Bangalore Male 52 Jitendra 41 Chennai Male 34 Krishna 89 After swapping index levels Gender and Age Name Rating City Age Gender Bangalore 34 Male Krishna 39 Hyderabad 35 Female Sailu 43 29 Male Joel 67 Chennai 35 Female Chamu 100 Bangalore 52 Male Jitendra 41 Chennai 34 Male Krishna 89 After swapping index levels City and Gender Name Rating Gender Age City Male 34 Bangalore Krishna 39 Female 35 Hyderabad Sailu 43 Male 29 Hyderabad Joel 67 Female 35 Chennai Chamu 100 Male 52 Bangalore Jitendra 41 34 Chennai Krishna 89
Previous Next Home
No comments:
Post a Comment