Pandas如何按单列分组后展开分类唯一值并聚合统计计数
实现方案
要得到按score分组、各type值拆分为独立列统计频次的结果,不需要写复杂的自定义聚合逻辑,pandas有原生方法可以直接实现。
方法1:crosstab(推荐,写法最简洁)
pd.crosstab是专门用于统计两个维度交叉频次的内置函数,默认逻辑完全匹配需求:
import pandas as pd # df为你的原始数据集 result = pd.crosstab(index=df['score'], columns=df['type']).reset_index()
运行后会自动提取type列的所有唯一值作为单独列,单元格值为对应score、type组合的出现次数,无匹配数据的位置默认填充0,输出格式和你给出的目标结构完全一致。
方法2:groupby + unstack
如果习惯用groupby的操作逻辑,可以先按两个维度分组计数,再将type维度从行索引展开为列:
result = df.groupby(['score', 'type']) .size() .unstack(fill_value=0) .reset_index()
参数fill_value=0的作用是将不存在对应type的分组计数补为0,避免结果中出现空值。
之前结果不符合预期的原因
你之前的groupby操作仅以score作为唯一分组键,统计的是每个score分组下的总记录数,没有将type纳入分组维度,因此无法拆分出各type对应的独立统计列。
内容的提问来源于stack exchange,提问作者trombonebraveheart
相关产品推荐
相关产品推荐

