Python Forum

Full Version: How to melt dataframe multiple columns to one column
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have below dataframe, I want to melt all columns to one column. I use below code, but some thing I am missing

import pandas as pd
df = pd.DataFrame({'ID':['A1','A2','A1'],\
pd.melt(df, id_vars=['ID'], value_vars=['Estart','Eend','Rstart','Rend'])
Igot the below outputL
	ID	variable	value
0	A1	Estart	1
1	A2	Estart	4
2	A1	Estart	3
3	A1	Eend	4
4	A2	Eend	4
5	A1	Eend	5
6	A1	Rstart	1
7	A2	Rstart	2
8	A1	Rstart	1
9	A1	Rend	1
10	A2	Rend	6
11	A1	Rend	5
I want as below: Some help how to arrange ad below:

ID	variable	value
A1	Estart	1
A1	Eend	4
A1	Rstart	1
A1	Rend	1
A2	Estart	2
A2	Eend	4
A2	Rstart	2
A2	Rend	6
A1	Estart	3
A1	Eend	5
A1	Rstart	1
A1	Rend	5
There is .sort_values method which can help you to get desired order; Take a look at
the following example:
import numpy as np

def key_func(x):
    # This function impacts on sorting logic;
    if x.endswith('end'):
        return x[0] + '2'
    elif x.endswith('start'):
        return x[0] + '1'
    return x

pd.melt(df, id_vars=['ID'], value_vars=['Estart','Eend','Rstart','Rend']).sort_values(['ID', 'variable'], key=key_func)
So, you need to change key_func to meet your needs (however, I didn't understand the sorting logic lies behind the order that you want to get).