python - 将 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
所以级别值(之后technology
)df
应该堆叠在一个名为 的级别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 进行排序
解决方案
IIUC
df=df.melt(['id', 'technology']).assign(unit='').sort_values(['id','technology'])
df.id=np.arange(len(df))+1