ivot_table没有要聚合的数字类型 [英] pivot_table No numeric types to aggregate
问题描述
我想从以下具有列sales
,rep
的数据框中创建数据透视表.数据透视表显示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_index
和unstack
:
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_table
与aggfunc='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屋!