pandas - 如何为groupby结果的每个值绘制条形图,并计算pandas中每组中另一列中不同值的计数
问题描述
我有一个数据框如下:
我想按 Ngram 分组。然后在每组中,会有不同的 DocFreq 值 - 2, 3, 4..etc。我想要每个组中每个不同的 DocFreq 值的计数。例如,图像中有 7 个三元组。在这7个中,
1 trigram has docFreq = 7
1 trigram has docFreq = 4
1 trigram has docFreq = 3
4 trigrams have docFreq = 2
我想要一个三元组的条形图,它将 x 轴作为 docFreq 值,将 y 轴作为具有该文档频率的三元组的数量。(每个 ngram 的此类条形图)
在另一个stackoverflow答案的帮助下,我完成了以下操作:
dfu = df.groupby(['Ngram']).DocFreq.value_counts().unstack()
这产生下表:
我想为每个 n-gram 制作单独的条形图。所以基本上这张表中的每一行都应该是一个图,其中 docFreq 是 x 轴,值是每个条的高度。但我不知道如何从这张表中创建这些单独的条形图。或者是否尝试从该表创建,或者是否有任何方法我可以使用主数据框和 groupby 和 value_counts 并制作条形图。
请帮忙。
解决方案
我以粗略的方式取得了结果。
x = df.loc[(df['Ngram']==3) & (df['DocFreq'] > 1), ['Term', 'DocFreq', 'Ngram']]
xt = x.groupby(['DocFreq']).size()
ax = xt.iloc[:30].plot.bar(figsize = (40,30),rot = 0, )
ax.set_xlabel("Document Frequency")
ax.set_ylabel("Count of documents having the 'DocFreq' number of duplicates")
这给了我一个三元组的条形图,产生以下内容: 我只取到 30,因为如果我取整个长度,那么条形图就会变得混乱。因此,现在我将分别对所有 n-gram 执行此操作。希望有人能想出一种更快的方法来更高效、更漂亮地生成所有 n-gram 的图。
谢谢你。
推荐阅读
- angular - 路由 URL 在 Angular 7 中不像以前那样工作
- jquery - 禁用引导开关 html 元素而不切换状态
- sql-server - 恢复每日差异备份 - 没有文件准备好前滚问题
- c# - DateTime.Parse 抛出字符串无法识别,我不明白为什么
- c# - asp.net mvc C#项目中图像文件夹的正确位置是什么?
- java - 无法使用 HSSF Java 删除 Excel 工作表
- python - 使用 if_abs 将负整数转换为正整数
- php - 如何从数组输出中删除垃圾数据
- reactjs - Redux 使用 Typescript 连接 - TS2347
- sql-server - 如何从 VB.net 触发 SQL Server 数据库/表错误消息