[英]pivot_table No numeric types to aggregate
我想从以下数据框中创建一个数据透视表,其中包含列sales
、 rep
。 数据透视表显示sales
但没有rep
。 当我仅尝试使用rep
,出现错误DataError: No numeric types to aggregate
。 如何解决这个问题,以便我看到数字字段sales
和字段(字符串) 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'
,通过获取找到的第一个值来aggfunc='first'
每个(country, year, rep)
或(country, year, sales)
组。 在您的情况下,似乎没有重复项,因此第一个值与唯一值相同。
似乎问题来自列 rep 和 sales 的不同类型,如果将 sales 转换为str
类型并将 aggfunc 指定为sum
,则可以正常工作:
df.sales = df.sales.astype(str)
pd.pivot_table(df, index=['country'], columns=['year'], values=['rep', 'sales'], aggfunc='sum')
# 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.