pivot_table()到df没有要聚合的数字类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pivot_table()到df没有要聚合的数字类型相关的知识,希望对你有一定的参考价值。
我有一个df,我试图去反规范化。基本上我想将参数值,如'inst-cap-c'
,'cap-lo-c'
等更改为列。
为了做到这一点,目前在pandas lib中有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: No numeric types to aggregate
我猜它是因为None
值ep-ratio
,我不能使用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
列添加到列表,在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
以上是关于pivot_table()到df没有要聚合的数字类型的主要内容,如果未能解决你的问题,请参考以下文章
使用 pivot_table 将一列 dict 聚合到一个 dict 列表中 - Pandas