w3resource

Pandas: Drop a level from a multi-level column index

Pandas Indexing: Exercise-21 with Solution

Write a Pandas program to drop a index level from a multi-level column index of a dataframe.

Note: Levels are 0-indexed beginning from the top.

Sample Solution:

Python Code :

import pandas as pd
cols = pd.MultiIndex.from_tuples([("a", "x"), ("a", "y"), ("a", "z")])
print("\nConstruct a Dataframe using the said MultiIndex levels: ")
df = pd.DataFrame([[1,2,3], [3,4,5], [5,6,7]], columns=cols)
print(df)
#Levels are 0-indexed beginning from the top.
print("\nRemove the top level index:")
df.columns = df.columns.droplevel(0)
print(df)
df = pd.DataFrame([[1,2,3], [3,4,5], [5,6,7]], columns=cols)
print("\nOriginal dataframe:")
print(df)
print("\nRemove the index next to top level:")
df.columns = df.columns.droplevel(1)
print(df)

Sample Output:

Construct a Dataframe using the said MultiIndex levels: 
   a      
   x  y  z
0  1  2  3
1  3  4  5
2  5  6  7

Remove the top level index:
   x  y  z
0  1  2  3
1  3  4  5
2  5  6  7

Original dataframe:
   a      
   x  y  z
0  1  2  3
1  3  4  5
2  5  6  7

Remove the index next to top level:
   a  a  a
0  1  2  3
1  3  4  5
2  5  6  7

Python Code Editor:


Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous: Write a Pandas program to find the indexes of rows of a specified value of a given column in a DataFrame.
Next: Write a Pandas program to insert a column at a specific index in a given DataFrame.

What is the difficulty level of this exercise?

Test your Python skills with w3resource's quiz



Python: Tips of the Day

For-else construct useful when searched for something and find it:

# For example assume that I need to search through a list and process each item until a flag item is found and 
# then stop processing. If the flag item is missing then an exception needs to be raised.

for i in mylist:
    if i == theflag:
        break
    process(i)
else:
    raise ValueError("List argument missing terminal flag.")