pandas实现同时基于genre与独热编码分类列的value_counts()统计
解决方案
你之前的代码丢失genre维度是因为提前删除了genre列,只要将genre保留为分组维度即可实现关联统计,以下是两种常用的统计形式适配不同使用需求:
形式1:宽表格式(按体裁分组,各分类计数为列)
每行对应一个体裁,每列对应一个分类,数值为该体裁下属于对应分类的文本总数:
# 丢弃不需要的text列后按genre分组,对所有分类列求和 genre_category_count = df.drop(columns='text').groupby('genre').sum()
如果需要按总计数排序,可以额外对行/列的求和结果排序。
形式2:长表格式(体裁+分类为维度,更接近value_counts的使用习惯)
每行对应一个「体裁+分类」的组合,单列展示对应计数,支持直接排序:
count_result = ( df.drop(columns='text') # 保留genre列,将所有分类独热列转为长表格式 .melt(id_vars='genre', var_name='category', value_name='is_match') # 过滤出归属对应分类的记录 .query('is_match == 1') # 按体裁和分类分组统计数量 .groupby(['genre', 'category'], as_index=False) .size() .rename(columns={'size':'count'}) .sort_values('count', ascending=False) )
如果你的分类列有统一前缀(比如示例中的category_开头),也可以通过df.filter(like='category_')的方式灵活筛选分类列,避免手动指定列名。
内容的提问来源于stack exchange,提问作者eigenvektorin
相关产品推荐
相关产品推荐

