gpt4 book ai didi

python - ivot_table() 到 df 没有要聚合的数字类型

转载 作者:行者123 更新时间:2023-12-01 08:16:38 26 4
gpt4 key购买 nike

我有一个 df,我正在尝试对其进行非规范化。基本上我想将 'inst-cap-c''cap-lo-c' 等参数值更改为列。

为了做到这一点,到目前为止,pandas 库中有 2 个方法。对于他们两个,我都遇到了一些问题,并且无法对这个 df 进行非规范化...

df 如下所示(为简单起见,使用...):

data       
Site Storage Commodity parameter value
0 Mid Pump Elec inst-cap-c 0
1 Mid Pump Elec cap-lo-c 0
2 Mid Pump Elec cap-up-c 1.5e+15
3 Mid Pump Elec inst-cap-p 0
4 Mid Pump Elec cap-lo-p 0
...
52 South Pump Elec wacc 0.07
53 South Pump Elec depreciation 50
54 South Pump Elec init 1
55 South Pump Elec discharge 3.5e-06
56 South Pump Elec ep-ratio None

当我尝试通过以下方式创建带有参数值的列时:

data.pivot_table(values='value',
index=['Site', 'Storage', 'Commodity'],
columns='parameter')

它只是说:*** pandas.core.base.DataError:没有要聚合的数字类型

我猜这是因为 ep-ratioNone 值,我不能使用 NaN 而不是 None,因为它造成了其他问题。

那么如何对这个数据框进行非规范化呢?

预期结果:

data       
Site Storage Commodity inst-cap-c cap-lo-c cap-up-c ... ep-ratio
0 Mid Pump Elec 0 0 1.5e+15 ... None
1 North Pump Elec 0 0 1.5e+15 ... None
2 South Pump Elec 0 0 1.5e+15 ... None
<小时/>

额外:

data.set_index(['Site', 'Storage','Commodity'], append=True).unstack('parameter')
*** KeyError: 'Level parameter not found'

我也检查了这一点:pivot_table No numeric types to aggregate这没有帮助

最佳答案

您已接近,需要将parameter列添加到列表中,选择unstack之前的value列最后一次使用reset_indexrename_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

关于python - ivot_table() 到 df 没有要聚合的数字类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54950518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com