Understand the idea
melt stacks measurement columns into rows. Identifiers repeat so every stacked value can still be traced to its source record.
A small example
One row Ada · age 4 · weight 8 becomes Ada · age · 4 and Ada · weight · 8.
Follow the code
Apply the idea to the supplied table. Read from top to bottom; the final line displays the result.
df.melt(
id_vars=["candy"],
value_vars=["price", "rating"],
var_name="measure",
value_name="value",
)What each part does
id_vars=[...]- identifiers repeated beside each measure
value_vars=[...]- columns to stack
var_name / value_name- names for the new columns
Your inputs
The editable setup on the right creates df. Run executes the setup and your work from top to bottom.
| candy | flavour | price | rating | shelf |
|---|---|---|---|---|
| Gummy Bear | fruity | 1.2 | 4.1 | A |
| Choco Pop | chocolate | 2.1 | 4.6 | B |
| Mint Bite | mint | 1.5 | 3.8 | A |
| Berry Loop | fruity | 2.8 | 4.4 | B |
| Cocoa Cube | chocolate | 3.4 | 4.9 | A |
| Lemon Drop | fruity | 1.8 | 4 | B |
Your task · Follow
Using df, melt price and rating into measure and value columns, retaining candy as the identifier.
Hint
Identifiers repeat; selected measurement columns become measure/value rows.
Reveal solution
One way to do it. Keep any supplied setup in the editor and use this in the Your work section.
df.melt(
id_vars=["candy"],
value_vars=["price", "rating"],
var_name="measure",
value_name="value",
)