Bird
Raised Fist0
Pandasdata~30 mins

stack() and unstack() in Pandas - Mini Project: Build & Apply

Choose your learning style10 modes available
Using stack() and unstack() in pandas
📖 Scenario: You work in a small company that tracks sales data for different products across several months. The data is stored in a table format, but sometimes you need to change how the data is arranged to better understand it.
🎯 Goal: You will learn how to use pandas stack() and unstack() methods to reshape data. This helps you switch between wide and long formats of your sales data.
📋 What You'll Learn
Create a pandas DataFrame with sales data for products over months
Create a variable to select a specific month
Use stack() to convert columns into rows
Use unstack() to convert rows back into columns
Print the final reshaped data
💡 Why This Matters
🌍 Real World
In real companies, sales data often comes in wide tables. Reshaping data with stack and unstack helps prepare data for reports and charts.
💼 Career
Data analysts and scientists frequently reshape data to clean and analyze it. Knowing stack and unstack is a basic skill for data manipulation.
Progress0 / 4 steps
1
Create the sales DataFrame
Create a pandas DataFrame called sales with the following data: products as the index 'Product A', 'Product B', 'Product C' and columns as months 'Jan', 'Feb', 'Mar' with these values exactly:
Jan: 100, 150, 200
Feb: 110, 160, 210
Mar: 120, 170, 220
Pandas
Hint

Use pd.DataFrame with a dictionary for columns and index for product names.

2
Select the month to analyze
Create a variable called month and set it to the string 'Feb' to select the sales data for February.
Pandas
Hint

Just assign the string 'Feb' to the variable month.

3
Use stack() and unstack() to reshape data
Use stack() on the sales DataFrame and save the result in a variable called stacked_sales. Then use unstack() on stacked_sales and save it in a variable called unstacked_sales.
Pandas
Hint

Call stack() on sales and assign it to stacked_sales. Then call unstack() on stacked_sales and assign it to unstacked_sales.

4
Print the reshaped data
Print the stacked_sales variable, then print the unstacked_sales variable.
Pandas
Hint

Use two print statements: print(stacked_sales) and print(unstacked_sales.loc['Product A']).

Practice

(1/5)
1. What does the stack() function do in pandas?
easy
A. It filters rows based on a condition.
B. It moves rows into columns, making the data wider.
C. It moves columns into rows, making the data longer.
D. It sorts the DataFrame by index.

Solution

  1. Step 1: Understand the purpose of stack()

    stack() takes the columns of a DataFrame and stacks them into the row index, making the data longer.
  2. Step 2: Compare with other options

    unstack() does the opposite by moving rows into columns. Sorting and filtering are unrelated to stack().
  3. Final Answer:

    It moves columns into rows, making the data longer. -> Option C
  4. Quick Check:

    stack() = columns to rows [OK]
Hint: Remember: stack makes data longer by moving columns down [OK]
Common Mistakes:
  • Confusing stack() with unstack()
  • Thinking stack() sorts data
  • Assuming stack() filters rows
2. Which of the following is the correct syntax to unstack a DataFrame named df?
easy
A. df.stack()
B. df.unstack()
C. df.unstacked()
D. df.stack(unstack=True)

Solution

  1. Step 1: Recall the method names

    The method to move rows into columns is unstack(), so df.unstack() is correct.
  2. Step 2: Check other options

    df.stack() stacks columns into rows. unstacked() does not exist. stack(unstack=True) is invalid syntax.
  3. Final Answer:

    df.unstack() -> Option B
  4. Quick Check:

    Unstack method is unstack() [OK]
Hint: Use df.unstack() to widen data by moving rows to columns [OK]
Common Mistakes:
  • Using stack() instead of unstack()
  • Calling a non-existent method unstacked()
  • Passing wrong arguments to stack()
3. Given the DataFrame:
import pandas as pd
df = pd.DataFrame({
  'A': [1, 2],
  'B': [3, 4]
}, index=['x', 'y'])
stacked = df.stack()

What is the output of stacked?
medium
A. A Series with index ['A', 'B'] and values [1, 2]
B. A DataFrame with columns 'x' and 'y' and rows 'A' and 'B'
C. A DataFrame with columns 'A' and 'B' and rows 'x' and 'y'
D. A Series with MultiIndex: ('x', 'A')=1, ('x', 'B')=3, ('y', 'A')=2, ('y', 'B')=4

Solution

  1. Step 1: Understand stacking on df

    Stack moves columns into rows, creating a Series with a MultiIndex combining the original index and column labels.
  2. Step 2: Check the resulting Series

    The index pairs are ('x', 'A')=1, ('x', 'B')=3, ('y', 'A')=2, ('y', 'B')=4, matching A Series with MultiIndex: ('x', 'A')=1, ('x', 'B')=3, ('y', 'A')=2, ('y', 'B')=4.
  3. Final Answer:

    A Series with MultiIndex: ('x', 'A')=1, ('x', 'B')=3, ('y', 'A')=2, ('y', 'B')=4 -> Option D
  4. Quick Check:

    stack() output is MultiIndex Series [OK]
Hint: Stack creates MultiIndex Series combining rows and columns [OK]
Common Mistakes:
  • Expecting a DataFrame output instead of Series
  • Confusing index and columns after stacking
  • Ignoring MultiIndex structure
4. You run the code:
df = pd.DataFrame({
  'X': [10, 20],
  'Y': [30, 40]
}, index=['a', 'b'])
result = df.unstack(level=2)

What error will occur?
medium
A. KeyError: Level 2 not found
B. TypeError: unstack() takes no arguments
C. ValueError: Cannot unstack with duplicate entries
D. No error, returns unstacked DataFrame

Solution

  1. Step 1: Check the index levels of df

    df has a single index level ('a', 'b'), so level 2 does not exist.
  2. Step 2: Understand unstack(level=2) behavior

    Requesting level 2 causes a KeyError because that level is missing.
  3. Final Answer:

    KeyError: Level 2 not found -> Option A
  4. Quick Check:

    unstack(level) must match existing index levels [OK]
Hint: Check index levels before unstacking by level number [OK]
Common Mistakes:
  • Assuming unstack() accepts any level number
  • Expecting no error on invalid level
  • Confusing level number with label
5. You have a DataFrame with a MultiIndex on rows:
import pandas as pd
index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1)])
df = pd.DataFrame({'val': [10, 20, 30]}, index=index)

How can you reshape df so that the second level of the index becomes columns?
hard
A. Use df.unstack(level=1) to move second index level to columns.
B. Use df.stack(level=1) to move second index level to columns.
C. Use df.unstack(level=0) to move second index level to columns.
D. Use df.stack() without arguments.

Solution

  1. Step 1: Identify the MultiIndex levels

    The DataFrame has two index levels: level 0 ('A', 'B') and level 1 (1, 2).
  2. Step 2: Use unstack(level=1) to move second level to columns

    Unstacking level 1 moves that index level into columns, reshaping the data as required.
  3. Final Answer:

    Use df.unstack(level=1) to move second index level to columns. -> Option A
  4. Quick Check:

    unstack(level=1) moves second index level to columns [OK]
Hint: Unstack the desired index level number to widen data [OK]
Common Mistakes:
  • Using stack() instead of unstack()
  • Unstacking wrong level number
  • Ignoring MultiIndex structure
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard