Reshape wide to long in pandas

Use pandas.melt to transform from wide to long:

df = pd.DataFrame({
    'date' : ['05/03', '06/03', '07/03', '08/03'],
    'AA' : [1, 4, 7, 5],
    'BB' : [2, 5, 8, 7],
    'CC' : [3, 6, 9, 1]
}).set_index('date')
df

        AA  BB  CC
date            
05/03   1   2   3
06/03   4   5   6
07/03   7   8   9
08/03   5   7   1

To convert, we just need to reset the index and then melt:

df = df.reset_index()
pd.melt(df, id_vars="date", value_vars=['AA', 'BB', 'CC'])

this is the final result:

    date variable value
0   05/03   AA  1
1   06/03   AA  4
2   07/03   AA  7
3   08/03   AA  5
4   05/03   BB  2
5   06/03   BB  5
6   07/03   BB  8
7   08/03   BB  7
8   05/03   CC  3
9   06/03   CC  6
10  07/03   CC  9
11  08/03   CC  1

Leave a Comment