如何使用 pandas 中每个组中另一列中不同值的计数为 groupby 结果的每个值绘制条形图

How to plot a bar graph for each value of a groupby result with the count of the distinct values in another column in each group in pandas

我有一个数据框如下:

我想按 Ngram 分组。然后在每个组中,将有不同的 DocFreq 值 - 2、3、4..等。我想要每个组中 DocFreq 的每个不同值的计数。 例如,图像中有 7 个八卦。在这 7 个中,

1 trigram has docFreq = 7
1 trigram has docFreq = 4
1 trigram has docFreq = 3
4 trigrams have docFreq = 2

我想要一个 trigram 的条形图,x 轴作为 docFreq 值,y 轴作为具有该文档频率的 trigram 的数量。 (每个 ngram 的条形图)

我在另一个 Whosebug 答案的帮助下完成了以下操作:

dfu = df.groupby(['Ngram']).DocFreq.value_counts().unstack()

这会产生以下内容 table :

我想为每个 n-gram 制作单独的条形图。所以基本上这个 table 中的每一行都应该是一个图,其中 docFreq 是 x 轴,值是每个条的高度。 但是我不知道如何从这个 table 中创建这些单独的条形图。或者是否尝试从这个 table 创建,或者如果有任何方法我可以只使用主数据框和 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 的图形。

谢谢。