如何在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
相关产品推荐
相关产品推荐

