Python – Drop a level from a multi-level column index in Pandas dataframe

Multi-level column indexes in Pandas DataFrames provide hierarchical structure for columns. To drop a level from a multi-level column index, use the columns.droplevel() method. This is useful when you want to simplify your DataFrame structure by removing redundant hierarchy levels.

Creating a Multi-Level Column Index

First, create a multi-level column index using MultiIndex.from_tuples() ?

import numpy as np
import pandas as pd

# Create multi-level column index
columns = pd.MultiIndex.from_tuples([
    ("Sales", "Q1", "Jan"), 
    ("Sales", "Q1", "Feb"), 
    ("Sales", "Q2", "Mar")
])

# Create multi-level row index
vehicles = ['car', 'car', 'car', 'bike', 'bike', 'bike']
values = ['A', 'B', 'C', 'A', 'B', 'C']
index_arrays = [np.array(vehicles), np.array(values)]

# Create DataFrame with multi-level columns and index
df = pd.DataFrame(np.random.randn(6, 3), index=index_arrays, columns=columns)
df.index.names = ['Vehicle', 'Type']

print("Original DataFrame with 3-level columns:")
print(df)
Original DataFrame with 3-level columns:
            Sales                    
               Q1            Q2      
              Jan       Feb      Mar
Vehicle Type                        
car     A    0.52 -1.86  0.28
        B   -0.45  1.23 -0.67
        C    1.45 -0.32  0.89
bike    A   -0.78  0.56  1.34
        B    0.23 -1.45  0.67
        C   -0.89  0.78 -0.23

Dropping a Level from Column Index

Use droplevel() to remove the first level (index 0) from the column hierarchy ?

import numpy as np
import pandas as pd

# Create the same DataFrame
columns = pd.MultiIndex.from_tuples([
    ("Sales", "Q1", "Jan"), 
    ("Sales", "Q1", "Feb"), 
    ("Sales", "Q2", "Mar")
])

vehicles = ['car', 'car', 'car', 'bike', 'bike', 'bike']
values = ['A', 'B', 'C', 'A', 'B', 'C']
index_arrays = [np.array(vehicles), np.array(values)]

df = pd.DataFrame(np.random.randn(6, 3), index=index_arrays, columns=columns)
df.index.names = ['Vehicle', 'Type']

print("Before dropping level:")
print(df.columns)

# Drop the first level (index 0)
df.columns = df.columns.droplevel(0)

print("\nAfter dropping level 0:")
print(df.columns)
print("\nUpdated DataFrame:")
print(df)
Before dropping level:
MultiIndex([('Sales', 'Q1', 'Jan'),
            ('Sales', 'Q1', 'Feb'),
            ('Sales', 'Q2', 'Mar')],
           )

After dropping level 0:
MultiIndex([('Q1', 'Jan'),
            ('Q1', 'Feb'),
            ('Q2', 'Mar')],
           )

Updated DataFrame:
              Q1            Q2
             Jan   Feb     Mar
Vehicle Type               
car     A   0.52 -1.86  0.28
        B  -0.45  1.23 -0.67
        C   1.45 -0.32  0.89
bike    A  -0.78  0.56  1.34
        B   0.23 -1.45  0.67
        C  -0.89  0.78 -0.23

Dropping Different Levels

You can drop any level by specifying its index. Here's how to drop the middle level (index 1) ?

import numpy as np
import pandas as pd

# Recreate original DataFrame
columns = pd.MultiIndex.from_tuples([
    ("Sales", "Q1", "Jan"), 
    ("Sales", "Q1", "Feb"), 
    ("Sales", "Q2", "Mar")
])

vehicles = ['car', 'bike']
values = ['A', 'B', 'C']
index = pd.MultiIndex.from_product([vehicles, values], names=['Vehicle', 'Type'])

df = pd.DataFrame(np.random.randn(6, 3), index=index, columns=columns)

print("Original columns:")
print(df.columns)

# Drop level 1 (middle level)
df.columns = df.columns.droplevel(1)

print("\nAfter dropping level 1:")
print(df.columns)
print("\nDataFrame:")
print(df)
Original columns:
MultiIndex([('Sales', 'Q1', 'Jan'),
            ('Sales', 'Q1', 'Feb'),
            ('Sales', 'Q2', 'Mar')],
           )

After dropping level 1:
MultiIndex([('Sales', 'Jan'),
            ('Sales', 'Feb'),
            ('Sales', 'Mar')],
           )

DataFrame:
               Sales                    
                Jan      Feb      Mar
Vehicle Type                         
car     A      0.52    -1.86     0.28
        B     -0.45     1.23    -0.67
        C      1.45    -0.32     0.89
bike    A     -0.78     0.56     1.34
        B      0.23    -1.45     0.67
        C     -0.89     0.78    -0.23

Conclusion

Use DataFrame.columns.droplevel(level_index) to remove specific levels from multi-level column indexes. This simplifies DataFrame structure while preserving data and remaining hierarchy levels.

Updated on: 2026-03-26T01:37:29+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements