melt Method¶
The melt() function transforms a DataFrame from wide format to long format, unpivoting columns into rows.
Basic Usage¶
Convert columns to rows.
1. Wide to Long¶
import pandas as pd
data = {
"day": ["Monday", "Tuesday", "Wednesday"],
"chicago": [32, 30, 28],
"chennai": [75, 77, 75],
"berlin": [41, 43, 45],
}
df = pd.DataFrame(data)
print("Original DataFrame:")
print(df)
day chicago chennai berlin
0 Monday 32 75 41
1 Tuesday 30 77 43
2 Wednesday 28 75 45
2. Melt Transform¶
dg = pd.melt(df, id_vars=["day"], var_name='city', value_name='temperature')
print("Melted DataFrame:")
print(dg)
day city temperature
0 Monday chicago 32
1 Tuesday chicago 30
2 Wednesday chicago 28
3 Monday chennai 75
4 Tuesday chennai 77
5 Wednesday chennai 75
6 Monday berlin 41
7 Tuesday berlin 43
8 Wednesday berlin 45
3. Result Structure¶
Each city-day combination becomes a row.
Parameters¶
Control the melt transformation.
1. id_vars¶
# Columns to keep as identifiers
pd.melt(df, id_vars=["day"])
2. var_name¶
# Name for the column containing original column headers
pd.melt(df, id_vars=["day"], var_name='city')
3. value_name¶
# Name for the column containing values
pd.melt(df, id_vars=["day"], value_name='temperature')
LeetCode Example: Sales Report¶
Transform quarterly sales to long format.
1. Sample Data¶
report = pd.DataFrame({
'product': ['A', 'B'],
'Q1': [10, 15],
'Q2': [20, 25],
'Q3': [30, 35],
'Q4': [40, 45]
})
print(report)
product Q1 Q2 Q3 Q4
0 A 10 20 30 40
1 B 15 25 35 45
2. Melt Transform¶
result = pd.melt(
report,
id_vars=["product"],
var_name='quarter',
value_name='sales'
)
print(result)
product quarter sales
0 A Q1 10
1 B Q1 15
2 A Q2 20
3 B Q2 25
4 A Q3 30
5 B Q3 35
6 A Q4 40
7 B Q4 45
3. Analysis Ready¶
Long format is easier for groupby and plotting.
value_vars Parameter¶
Select specific columns to unpivot.
1. Subset of Columns¶
pd.melt(
report,
id_vars=["product"],
value_vars=["Q1", "Q2"], # Only Q1 and Q2
var_name='quarter',
value_name='sales'
)
2. Exclude Columns¶
# If not specified, all non-id columns are melted
3. Column Order¶
# value_vars also controls order in result
Method vs Function¶
Two ways to call melt.
1. Function Syntax¶
pd.melt(df, id_vars=["day"])
2. Method Syntax¶
df.melt(id_vars=["day"])
3. Equivalent Results¶
Both produce identical output.