What if you could twist and turn your data tables with just one line of code?
Why stack() and unstack() in Pandas? - Purpose & Use Cases
Imagine you have a big table of data with rows and columns, like a spreadsheet. You want to change how the data is arranged to see it from a different angle. Doing this by hand means copying and pasting cells, which is slow and confusing.
Manually rearranging data is slow and easy to mess up. You might lose track of which data belongs where, make mistakes copying cells, or spend hours just moving things around instead of analyzing.
The stack() and unstack() functions in pandas let you quickly flip data between rows and columns. This helps you reshape your data easily without errors, so you can focus on understanding it.
Copy columns and paste as rows in spreadsheet
df_stacked = df.stack() df_unstacked = df_stacked.unstack()
With stack() and unstack(), you can reshape complex tables instantly to explore data from new perspectives.
Suppose you have sales data by product and month in columns. Using stack(), you turn months into rows to analyze trends over time easily.
Manual reshaping is slow and error-prone.
stack() and unstack() flip data between rows and columns effortlessly.
This makes data analysis faster and more flexible.
Practice
stack() function do in pandas?Solution
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.Step 2: Compare with other options
unstack()does the opposite by moving rows into columns. Sorting and filtering are unrelated tostack().Final Answer:
It moves columns into rows, making the data longer. -> Option CQuick Check:
stack()= columns to rows [OK]
- Confusing stack() with unstack()
- Thinking stack() sorts data
- Assuming stack() filters rows
df?Solution
Step 1: Recall the method names
The method to move rows into columns isunstack(), sodf.unstack()is correct.Step 2: Check other options
df.stack()stacks columns into rows.unstacked()does not exist.stack(unstack=True)is invalid syntax.Final Answer:
df.unstack() -> Option BQuick Check:
Unstack method isunstack()[OK]
- Using stack() instead of unstack()
- Calling a non-existent method unstacked()
- Passing wrong arguments to stack()
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?Solution
Step 1: Understand stacking on df
Stack moves columns into rows, creating a Series with a MultiIndex combining the original index and column labels.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.Final Answer:
A Series with MultiIndex: ('x', 'A')=1, ('x', 'B')=3, ('y', 'A')=2, ('y', 'B')=4 -> Option DQuick Check:
stack() output is MultiIndex Series [OK]
- Expecting a DataFrame output instead of Series
- Confusing index and columns after stacking
- Ignoring MultiIndex structure
df = pd.DataFrame({
'X': [10, 20],
'Y': [30, 40]
}, index=['a', 'b'])
result = df.unstack(level=2)What error will occur?
Solution
Step 1: Check the index levels of df
df has a single index level ('a', 'b'), so level 2 does not exist.Step 2: Understand unstack(level=2) behavior
Requesting level 2 causes a KeyError because that level is missing.Final Answer:
KeyError: Level 2 not found -> Option AQuick Check:
unstack(level) must match existing index levels [OK]
- Assuming unstack() accepts any level number
- Expecting no error on invalid level
- Confusing level number with label
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?Solution
Step 1: Identify the MultiIndex levels
The DataFrame has two index levels: level 0 ('A', 'B') and level 1 (1, 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.Final Answer:
Use df.unstack(level=1) to move second index level to columns. -> Option AQuick Check:
unstack(level=1) moves second index level to columns [OK]
- Using stack() instead of unstack()
- Unstacking wrong level number
- Ignoring MultiIndex structure
Ready to prove it?
Pass the test and this pattern moves unknown
