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

我猜它是因为Noneep-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_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  

以上是关于pivot_table()到df没有要聚合的数字类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 pivot_table 将一列 dict 聚合到一个 dict 列表中 - Pandas

代码在控制台中完美运行,但出现错误:编织到 pdf 时没有要聚合的行

pandas pivot_table 活学活用实例教程

没有要聚合的数字类型?

数据透视表和数据交叉表

带有计数的数据透视表 if