You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按分类统计词频?已获取矢量化DataFrame与vectorizer.vocabulary_

按分类统计词汇词频的解决方案

Hey 👋,别着急!我来一步步帮你搞定按分类统计词汇词频的问题,其实核心就是把文档级的词频聚合到分类级别,再把词汇索引映射回实际词汇就行。

先理清楚你的现有资源

从你的描述来看,你已经有:

  • 一个分类×词汇的DataFrame(行是分类,列是词汇,单元格是对应词频)
  • vectorizer.vocabulary_:词汇到列索引的映射字典(比如{'the': 17480})

如果你的目标是把所有词汇(包括vocabulary_里的所有词)都按分类统计词频,或者完善现有DataFrame的词汇覆盖,咱们可以这么做:


步骤1:生成索引到词汇的反向映射

vectorizer.vocabulary_是「词汇→索引」的映射,我们需要把它转成「索引→词汇」的反向字典,方便后续对应矩阵列:

# 生成索引到词汇的反向字典
idx_to_word = {idx: word for word, idx in vectorizer.vocabulary_.items()}

步骤2:从文档级词频聚合到分类级(如果还没得到分类汇总)

如果你现在只有文档×词汇的原始矢量化矩阵(比如vectorizer.transform(texts)得到的稀疏矩阵),先把它转成带分类的DataFrame,再分组求和:

import pandas as pd

# 假设你有:原始文本对应的分类列表categories,以及矢量化后的矩阵X
df = pd.DataFrame(X.toarray(), columns=vectorizer.get_feature_names_out())
df['category'] = categories  # 给每个文档添加对应的分类列

# 按分类分组,对所有词汇列求和,得到每个分类下的词汇总词频
category_word_freq = df.groupby('category').sum()

步骤3:完善你已有的分类-词汇DataFrame

如果你已经有开头提到的那个DataFrame,但想补充vocabulary_里的所有词汇,可以用reindex补全缺失的词汇(缺失的词频自动设为0):

# 获取vectorizer包含的所有词汇列表
all_words = list(vectorizer.vocabulary_.keys())
# 重新索引现有DataFrame,补充缺失词汇
full_category_freq = your_existing_df.reindex(columns=all_words, fill_value=0)

关键小提示

  • 别手动匹配vocabulary_的索引!直接用vectorizer.get_feature_names_out()就能得到和矩阵列完全对应的词汇列表,比自己排序字典靠谱多了~
  • 如果你的矢量化矩阵是稀疏矩阵(比如csr_matrix),数据量很大时可以用pd.DataFrame.sparse.from_spmatrix(X)创建DataFrame,比转成数组更高效。

这样你就能清晰看到每个分类下各个词汇的总出现次数啦,新手可以先拿小样本测试一下,验证结果是否符合预期哦😉

内容的提问来源于stack exchange,提问作者Viktor.w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:48:23