I am new to Python especially Pandas. I have one dataframe like
-----------------------------------------------------
Id Name Salary desc1 des
You need set_index + stack:
df = df.set_index(['Id','Name','Salary'])
.stack()
.reset_index(level=3, drop=True)
.reset_index(name='Variable')
print (df)
Id Name Salary Variable
0 1 ABC1 2000 x1
1 1 ABC1 2000 y1
2 1 ABC1 2000 z1
3 2 ABC2 5000 x2
4 2 ABC2 5000 y1
5 2 ABC2 5000 z2
If sorting first 3 columns is not necessary:
Use melt:
df = df.melt(['Id','Name','Salary'], value_name='Variable').drop('variable', axis=1)
print (df)
Id Name Salary Variable
0 1 ABC1 2000 x1
1 2 ABC2 5000 x2
2 1 ABC1 2000 y1
3 2 ABC2 5000 y1
4 1 ABC1 2000 z1
5 2 ABC2 5000 z2
lreshape is now undocumented, but is possible in future will by removed (github link).
df = pd.lreshape(df, {'Variable':['desc1','desc2','desc3']})
print (df)
Id Name Salary Variable
0 1 ABC1 2000 x1
1 2 ABC2 5000 x2
2 1 ABC1 2000 y1
3 2 ABC2 5000 y1
4 1 ABC1 2000 z1
5 2 ABC2 5000 z2