我是Python的新手,特别是Pandas。 我有一个像
这样的数据框-----------------------------------------------------
Id Name Salary desc1 desc2 desc3
-----------------------------------------------------
1 ABC1 2000 x1 y1 z1
-----------------------------------------------------
2 ABC2 5000 x2 y1 z2
-----------------------------------------------------
我想把它变成这种方式
-----------------------------------------
ID Name Salary Variable
-----------------------------------------
1 ABC1 2000 x1
-----------------------------------------
1 ABC1 2000 y1
-----------------------------------------
1 ABC1 2000 z1
-----------------------------------------
2 ABC2 5000 x2
-----------------------------------------
2 ABC2 5000 y2
-----------------------------------------
2 ABC2 5000 z2
-----------------------------------------
请帮忙。提前谢谢。
答案 0 :(得分:2)
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
如果不需要排序前3列:
使用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
现在没有记录,但将来可能会删除(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