我有以下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进行排序
答案 0 :(得分:1)
IIUC
df=df.melt(['id', 'technology']).assign(unit='').sort_values(['id','technology'])
df.id=np.arange(len(df))+1