ivot_table没有要聚合的数字类型 [英] pivot_table No numeric types to aggregate

查看:74
本文介绍了ivot_table没有要聚合的数字类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从以下具有列salesrep的数据框中创建数据透视表.数据透视表显示sales,但不显示rep.当我仅尝试使用rep时,出现错误DataError: No numeric types to aggregate.如何解决此问题,以便同时看到数字字段sales和字段(字符串)rep

I want to make a pivot table from the following dataframe with columns sales, rep. The pivot table shows sales but no rep. When I tried with only rep, I got the error DataError: No numeric types to aggregate. How to fix this such that I see both the numeric field sales and the field(string) rep

data = {'year': ['2016', '2016', '2015', '2014', '2013'],
        'country':['uk', 'usa', 'fr','fr','uk'],
        'sales': [10, 21, 20, 10,12],
        'rep': ['john', 'john', 'claire', 'kyle','kyle']
        }

print pd.DataFrame(data).pivot_table(index='country', columns='year', values=['rep','sales'])

        sales               
year     2013 2014 2015 2016
country                     
fr        NaN   10   20  NaN
uk         12  NaN  NaN   10
usa       NaN  NaN  NaN   21


print pd.DataFrame(data).pivot_table(index='country', columns='year', values=['rep'])
DataError: No numeric types to aggregate

推荐答案

您可以使用set_indexunstack:

df = pd.DataFrame(data)
df.set_index(['year','country']).unstack('year')

收益

          rep                     sales                  
year     2013  2014    2015  2016  2013  2014  2015  2016
country                                                  
fr       None  kyle  claire  None   NaN  10.0  20.0   NaN
uk       kyle  None    None  john  12.0   NaN   NaN  10.0
usa      None  None    None  john   NaN   NaN   NaN  21.0

或者,将pivot_tableaggfunc='first'结合使用:

df.pivot_table(index='country', columns='year', values=['rep','sales'], aggfunc='first')

收益

          rep                     sales                  
year     2013  2014    2015  2016  2013  2014  2015  2016
country                                                  
fr       None  kyle  claire  None  None    10    20  None
uk       kyle  None    None  john    12  None  None    10
usa      None  None    None  john  None  None  None    21

对于aggfunc='first',每个(country, year, rep)(country, year, sales) 通过获取找到的第一个值来聚集组.在您的情况下,似乎没有重复项,因此第一个值与唯一的值相同.

With aggfunc='first', each (country, year, rep) or (country, year, sales) group is aggregrated by taking the first value found. In your case there appears to be no duplicates, so the first value is the same as the only value.

这篇关于ivot_table没有要聚合的数字类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆