通过重复行重塑数据帧

2024-09-29 01:27:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python特别是熊猫是新来的。 我有一个数据帧

-----------------------------------------------------
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 
-----------------------------------------

请帮忙。提前谢谢。你知道吗


Tags: 数据nameidx1x2salaryy1z2
1条回答
网友
1楼 · 发布于 2024-09-29 01:27:27

您需要^{}+^{}

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列进行排序:

使用^{}

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

^{}现在没有文档记录,但将来可能会被删除(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

相关问题 更多 >