📖 Scenario: Imagine you have sales data for different stores and products. The data is organized with a MultiIndex on rows, showing store and product names. You want to convert this MultiIndex back into regular columns to make the data easier to read and analyze.
🎯 Goal: You will create a pandas DataFrame with a MultiIndex, then reset the MultiIndex to turn it into normal columns.
📋 What You'll Learn
Create a pandas DataFrame with a MultiIndex from given data
Create a variable to hold the DataFrame
Use the reset_index() method to convert the MultiIndex into columns
Print the resulting DataFrame
💡 Why This Matters
🌍 Real World
Data often comes with hierarchical indexes that are useful for grouping but hard to read. Resetting MultiIndex to columns helps make data easier to analyze and visualize.
💼 Career
Data scientists and analysts frequently manipulate MultiIndex DataFrames to prepare data for reports, visualizations, or machine learning models.
Progress0 / 4 steps
1
Create a pandas DataFrame with MultiIndex
Import pandas as pd. Create a DataFrame called sales with the following MultiIndex and data:
- MultiIndex levels: Store with values 'Store A', 'Store B' - MultiIndex levels: Product with values 'Apples', 'Bananas' - Data column Sales with values 100, 150, 200, 250 corresponding to each Store-Product pair.
Use pd.MultiIndex.from_tuples() to create the MultiIndex from tuples [('Store A', 'Apples'), ('Store A', 'Bananas'), ('Store B', 'Apples'), ('Store B', 'Bananas')].
Pandas
Hint
Use pd.MultiIndex.from_tuples() with the list of tuples and set names=['Store', 'Product']. Then create the DataFrame with sales = pd.DataFrame({'Sales': [...]}, index=index).
2
Create a variable for the reset DataFrame
Create a new variable called sales_reset that will hold the DataFrame after resetting the MultiIndex.
Pandas
Hint
Just create the variable sales_reset and assign None for now. You will update it in the next step.
3
Reset the MultiIndex to columns
Use the reset_index() method on the sales DataFrame and assign the result to the variable sales_reset.
Pandas
Hint
Call sales.reset_index() and assign it to sales_reset.
4
Print the DataFrame with reset columns
Print the sales_reset DataFrame to see the MultiIndex converted into columns.
Pandas
Hint
Use print(sales_reset) to display the DataFrame.
Practice
(1/5)
1. What does resetting a MultiIndex in a pandas DataFrame do?
easy
A. Converts columns into index levels
B. Deletes the DataFrame
C. Moves index levels back into columns
D. Sorts the DataFrame by index
Solution
Step 1: Understand MultiIndex structure
A MultiIndex means the DataFrame has multiple levels of row labels (index levels).
Step 2: Effect of reset_index()
Resetting the MultiIndex moves these index levels back into regular columns for easier access.
Final Answer:
Moves index levels back into columns -> Option C
Quick Check:
Reset MultiIndex = index levels to columns [OK]
Hint: Resetting MultiIndex moves index levels to columns [OK]
Common Mistakes:
Thinking reset_index deletes the DataFrame
Confusing reset_index with sorting
Believing reset_index converts columns to index
2. Which of the following is the correct syntax to reset all index levels of a DataFrame df with a MultiIndex?
easy
A. df.reset_index()
B. df.reset_index(drop=True)
C. df.reset_index(level=0)
D. df.reset_index(inplace=False)
Solution
Step 1: Identify default reset_index behavior
Calling df.reset_index() resets all index levels and moves them to columns.
Step 2: Check other options
drop=True removes index levels without adding columns, level=0 resets only one level, and inplace=False is default but not necessary here.
Final Answer:
df.reset_index() -> Option A
Quick Check:
Default reset_index resets all levels [OK]
Hint: Use df.reset_index() to reset all index levels [OK]
Common Mistakes:
Using drop=True when columns are needed
Resetting only one level unintentionally
Confusing inplace parameter with reset behavior
3. Given the following DataFrame df with MultiIndex:
A. Columns: ['level_0', 'level_1', 'Value'] with rows [('A', 1, 10), ('A', 2, 20), ('B', 1, 30)]
B. Columns: ['Value'] with index [('A', 1), ('A', 2), ('B', 1)]
C. Columns: ['level_0', 'Value'] with rows [('A', 10), ('A', 20), ('B', 30)]
D. Columns: ['level_1', 'Value'] with rows [(1, 10), (2, 20), (1, 30)]
Solution
Step 1: Understand MultiIndex and reset_index()
The MultiIndex has two levels named by default 'level_0' and 'level_1'. Resetting moves these to columns.
Step 2: Check resulting DataFrame columns and rows
After reset, columns are ['level_0', 'level_1', 'Value'] with rows [('A', 1, 10), ('A', 2, 20), ('B', 1, 30)].
Final Answer:
Columns: ['level_0', 'level_1', 'Value'] with rows [('A', 1, 10), ('A', 2, 20), ('B', 1, 30)] -> Option A
Quick Check:
reset_index moves all index levels to columns [OK]
Hint: reset_index adds all index levels as columns by default [OK]
Common Mistakes:
Expecting index to remain after reset
Missing one of the index levels as column
Confusing which columns appear after reset
4. You run the code:
df.reset_index(level='wrong_level')
and get an error. What is the most likely cause?
medium
A. You must use drop=True with level parameter
B. reset_index does not accept level parameter
C. reset_index only works on single-level indexes
D. The specified level 'wrong_level' does not exist in the MultiIndex
Solution
Step 1: Understand level parameter in reset_index()
The level parameter specifies which index level(s) to reset by name or position.
Step 2: Identify error cause
If the level name does not exist in the MultiIndex, pandas raises a KeyError.
Final Answer:
The specified level 'wrong_level' does not exist in the MultiIndex -> Option D
Quick Check:
Invalid level name causes error [OK]
Hint: Check index level names before using level parameter [OK]
Common Mistakes:
Assuming any string works as level name
Forgetting to check MultiIndex names
Thinking drop=True fixes level name errors
5. You have a DataFrame df with a MultiIndex of three levels: 'Year', 'Month', 'Day'. You want to reset only 'Month' and 'Day' to columns but keep 'Year' as the index. Which code correctly does this?
hard
A. df.reset_index(level='Year')
B. df.reset_index(level=['Month', 'Day'])
C. df.reset_index(drop=True)
D. df.reset_index(level=['Year', 'Month', 'Day'])
Solution
Step 1: Identify which levels to reset
You want to reset 'Month' and 'Day' only, keeping 'Year' as index.
Step 2: Use reset_index with level parameter
Passing level=['Month', 'Day'] resets those two levels to columns, leaving 'Year' as index.
Step 3: Check other options
df.reset_index(level='Year') resets 'Year' only, C drops all index levels, D resets all three levels.
Final Answer:
df.reset_index(level=['Month', 'Day']) -> Option B
Quick Check:
Reset specific levels with level parameter [OK]
Hint: Use level list to reset specific MultiIndex levels [OK]
Common Mistakes:
Resetting wrong levels by name
Using drop=True which removes columns
Resetting all levels unintentionally
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.