Pandas用groupby+unstack生成表后新增列报Categorical分类缺失错误如何解决
报错原因
你执行赋值操作时报错的核心原因是df_sub的列是CategoricalIndex类型,这类索引仅允许操作预先定义的分类值(当前只有Customer、Subscriber两个合法值),新增的列名ratio不在分类列表中,因此触发类型校验错误。
解决方案
方案1:转换为普通字符串列索引(最常用,无需保留分类特性时推荐)
直接将分类索引转为普通字符串索引,后续新增列不受限制:
df_sub = df.groupby(['time_section', 'day_type', 'user_type']).size().unstack() # 转换列索引为字符串类型 df_sub.columns = df_sub.columns.astype(str) df_sub['ratio'] = df_sub['Subscriber'] / df_sub['Customer']
方案2:保留CategoricalIndex特性(需要继续使用分类索引功能时使用)
先给分类索引新增ratio分类,再执行赋值操作:
df_sub = df.groupby(['time_section', 'day_type', 'user_type']).size().unstack() # 给分类列索引新增ratio合法值 df_sub.columns = df_sub.columns.add_categories('ratio') df_sub['ratio'] = df_sub['Subscriber'] / df_sub['Customer']
内容的提问来源于stack exchange,提问作者Peter Liu
相关产品推荐
相关产品推荐

