Skip to content

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.