我有一个 df,我正试图对其进行非规范化。基本上我想更改参数值,例如,'inst-cap-c','cap-lo-c'等...成列。为了做到这一点,pandas 库中目前有 2 种方法。对于他们两个,我都遇到了一些问题并且无法对这个 df 进行非规范化......df 如下所示(为简单起见...):data Site Storage Commodity parameter value0 Mid Pump Elec inst-cap-c 01 Mid Pump Elec cap-lo-c 02 Mid Pump Elec cap-up-c 1.5e+153 Mid Pump Elec inst-cap-p 04 Mid Pump Elec cap-lo-p 0...52 South Pump Elec wacc 0.0753 South Pump Elec depreciation 5054 South Pump Elec init 155 South Pump Elec discharge 3.5e-0656 South Pump Elec ep-ratio None当我尝试通过以下方式创建带有参数值的列时:data.pivot_table(values='value', index=['Site', 'Storage', 'Commodity'], columns='parameter')它只是说: *** pandas.core.base.DataError: No numeric types to aggregate我猜这是因为 的None值ep-ratio,我不能使用NaNover None,因为它造成了其他问题。那么我怎样才能对这个数据帧进行非规范化呢?预期结果:data Site Storage Commodity inst-cap-c cap-lo-c cap-up-c ... ep-ratio0 Mid Pump Elec 0 0 1.5e+15 ... None1 North Pump Elec 0 0 1.5e+15 ... None2 South Pump Elec 0 0 1.5e+15 ... None额外的:data.set_index(['Site', 'Storage','Commodity'], append=True).unstack('parameter')*** KeyError: 'Level parameter not found'
1 回答

拉莫斯之舞
TA贡献1820条经验 获得超10个赞
您已关闭,需要将parameter列添加到列表中,选择value之前unstack和最后使用的列reset_index以rename_axis进行数据清理:
df = (data.set_index(['Site', 'Storage','Commodity','parameter'])['value']
.unstack()
.reset_index()
.rename_axis(None, axis=1))
print (df)
Site Storage Commodity cap-lo-c cap-lo-p cap-up-c depreciation discharge \
0 Mid Pump Elec 0 0 1.5e+15 NaN NaN
1 South Pump Elec NaN NaN NaN 50 3.5e-06
ep-ratio init inst-cap-c inst-cap-p wacc
0 NaN NaN 0 0 NaN
1 None 1 NaN NaN 0.07
添加回答
举报
0/150
提交
取消