0
0
Pandasdata~10 mins

melt() for unpivoting in Pandas - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - melt() for unpivoting
Start with wide DataFrame
Choose id_vars (fixed columns)
Choose value_vars (columns to unpivot)
Apply melt()
Get long DataFrame with variable and value columns
Use for easier analysis or plotting
The melt() function takes a wide table and turns selected columns into rows, making data longer and easier to analyze.
Execution Sample
Pandas
import pandas as pd

df = pd.DataFrame({
    'Name': ['Anna', 'Bob'],
    'Math': [90, 80],
    'Science': [85, 88]
})

melted = pd.melt(df, id_vars=['Name'], value_vars=['Math', 'Science'], var_name='Subject', value_name='Score')
This code changes a table of student scores from wide to long format, listing each subject and score per student.
Execution Table
StepDataFrame StateActionResulting DataFrame Preview
1Original dfCreate DataFrame with columns Name, Math, Science[Name, Math, Science] [Anna, 90, 85] [Bob, 80, 88]
2dfCall pd.melt with id_vars=['Name'], value_vars=['Math', 'Science']New columns: Name, Subject, Score
3meltedRows created for each subject per student[Name, Subject, Score] [Anna, Math, 90] [Anna, Science, 85] [Bob, Math, 80] [Bob, Science, 88]
4meltedData is now long format, easier for analysisReady for plotting or grouping
💡 All specified value_vars columns are unpivoted into rows, process complete.
Variable Tracker
VariableStartAfter melt()
df[Anna, 90, 85] [Bob, 80, 88]Unchanged
meltedNot defined[Anna, Math, 90] [Anna, Science, 85] [Bob, Math, 80] [Bob, Science, 88]
Key Moments - 2 Insights
Why do we specify id_vars and value_vars in melt()?
id_vars are columns to keep fixed (like 'Name'), value_vars are columns to turn into rows (like 'Math' and 'Science'). See execution_table step 2 where melt() is called with these parameters.
What happens to the original columns after melt()?
Columns in value_vars are removed from wide form and appear as values in the new 'variable' column (here named 'Subject'). See execution_table step 3 for the new DataFrame structure.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of 'Subject' for the second row in the melted DataFrame?
AName
BScience
CMath
DScore
💡 Hint
Check execution_table row 3 showing the melted DataFrame preview.
At which step does the DataFrame change from wide to long format?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at execution_table rows 2 and 3 to see when the DataFrame structure changes.
If we add another subject column 'English' to value_vars, how would the melted DataFrame change?
AMore rows per student, one for English scores
BFewer rows, English scores replace Science
CNo change, English ignored
DColumns 'Name' and 'English' swapped
💡 Hint
Recall that melt() creates one row per value_vars column per id_vars row, see variable_tracker for melted shape.
Concept Snapshot
pandas melt() unpivots data:
- id_vars: columns to keep fixed
- value_vars: columns to turn into rows
- var_name: name for new variable column
- value_name: name for new value column
Transforms wide data to long format for easier analysis.
Full Transcript
The melt() function in pandas changes a wide table into a long one by turning selected columns into rows. We start with a DataFrame with columns like Name, Math, and Science. We keep 'Name' fixed using id_vars, and unpivot 'Math' and 'Science' using value_vars. The result is a longer DataFrame with columns Name, Subject, and Score. Each student has one row per subject. This format is easier for grouping and plotting. Key points are choosing which columns to keep and which to unpivot. The execution table shows each step from original data to melted data. The variable tracker shows how the DataFrame changes. The quiz checks understanding of the new structure and how melt works.