将 pandas df 与堆叠级别值归一化

normalizing pandas df with stacking level values together

我有以下 pandas 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

因此 df 的级别值(在 technology 之后)应该堆叠在名为 parameter 的级别中,它们的值应该放在级别 value 下,并且应该创建一个新级别 unit 为空。

我该怎么做?

@W-B ty for 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 关于变量(参数)而不是技术

IIUC

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