首页 > 解决方案 > 将 pandas df 与堆叠级别值归一化

问题描述

我有以下熊猫df,我想对其进行规范化:

df
    id         technology  co2_var  co2_fix  eta_elec 
0    1            lignite  0.39960   17.610     0.434
1    2          hard_coal  0.33012   11.660     0.390

标准化 df 应如下所示:

df_norm
    id         technology  parameter     value   unit 
0    1            lignite    co2_var   0.39960   
1    2            lignite    co2_fix    17.610          
2    3            lignite   eta_elec     0.434   
3    4          hard_coal    co2_var   0.33012
4    5          hard_coal    co2_fix    11.660
5    6          hard_coal   eta_elec     0.390

所以级别值(之后technologydf应该堆叠在一个名为 的级别parameter中,它们的值应该放在 level 下,并且应该创建value一个新级别为空。unit

我怎样才能做到这一点?

@WB 为df.melt(['id', 'technology']).assign(unit='')

     id         technology  variable    value   unit
0     1            lignite   co2_var  0.39960     
1     2          hard_coal   co2_var  0.33012
2     1            lignite   co2_fix ...   
3     2          hard_coal   co2_fix ...   

问题:

相同的 id 编号,实际上这对于变量(参数)而不是技术对 df 进行排序

标签: pythonpandasstacknormalize

解决方案


IIUC

df=df.melt(['id', 'technology']).assign(unit='').sort_values(['id','technology'])
df.id=np.arange(len(df))+1

推荐阅读