使用堆叠级别值将pdandas df标准化

时间:2019-01-16 15:26:41

标签: python pandas stack normalize

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

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

我该怎么做?

@ W-B ty 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进行排序

1 个答案:

答案 0 :(得分:1)

IIUC

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