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

如何在pandas中为groupby各分组统计另一列不同值计数并绘制柱状图

方法1:基于你已生成的dfu统计结果绘图

你已经得到的dfu的行索引为Ngram取值,列索引为DocFreq的不同取值,单元格值为对应计数,直接遍历每行即可生成单独的柱状图:

import matplotlib.pyplot as plt

# 遍历每个Ngram分组
for ngram_name, row_data in dfu.iterrows():
    # 过滤掉当前Ngram不存在的DocFreq取值(对应NaN)
    plot_data = row_data.dropna()
    # 生成画布并绘图
    plt.figure(figsize=(8, 4))
    plot_data.plot(kind="bar")
    # 配置图表信息
    plt.title(f"{ngram_name} DocFreq分布")
    plt.xlabel("DocFreq取值")
    plt.ylabel("Ngram数量")
    plt.xticks(rotation=0)
    # 展示图表,如需保存到本地可替换为 plt.savefig(f"{ngram_name}_分布.png")
    plt.show()

方法2:直接基于原DataFrame绘图,无需提前unstack

可以直接对分组计数后的多级索引结果按Ngram遍历,步骤更简洁:

import matplotlib.pyplot as plt

# 直接得到带多级索引的统计结果:第一层索引为Ngram,第二层为DocFreq
count_res = df.groupby("Ngram")["DocFreq"].value_counts()

# 按Ngram分组遍历
for ngram_name, group_data in count_res.groupby(level=0):
    x = group_data.index.get_level_values(1)
    y = group_data.values
    # 绘图
    plt.figure(figsize=(8, 4))
    plt.bar(x, y)
    plt.title(f"{ngram_name} DocFreq分布")
    plt.xlabel("DocFreq取值")
    plt.ylabel("Ngram数量")
    plt.show()

如果需要对DocFreq进行区间合并统计,可以提前用pd.cut()处理DocFreq字段后再执行上述逻辑即可。

内容的提问来源于stack exchange,提问作者Kiera.K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:24:05