【问题标题】: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如何为groupby结果的每个值绘制条形图以及pandas中每组中另一列中不同值的计数
【发布时间】:2021-11-14 21:58:00
【问题描述】:

我有一个如下的数据框:

我想按 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 并制作条形图。

请帮忙。

【问题讨论】:

    标签: pandas pandas-groupby bar-chart


    【解决方案1】:

    我以粗略的方式取得了结果。

    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 的图。

    谢谢。

    【讨论】:

      猜你喜欢
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2017-12-07
      • 2019-06-12
      • 2021-07-07
      相关资源
      最近更新 更多