【问题标题】:Plot the count of a Pandas df column using Plotly使用 Plotly 绘制 Pandas df 列的计数
【发布时间】:2021-06-13 14:09:52
【问题描述】:

我有一个 df 列,其中的数据只是分类数据(例如,[a、b、c、a、a、d、c、b 等])。 我想使用 plotly count bar(条形图)绘制这些数据的计数。

我已经使用df.groupby('<col_name>')['<col_name>'].count() 计算了数据的计数,但这会返回一个系列数据结构,因此我将只有计数数据(1-D)。

如何高效地得到计数结果和结果输出中对应的数据项?

我想获得这个输出并使用 Plotly 绘制条形图:

import plotly.express as px

fig = px.bar(count_df, x="<col_name>", y="count", color="count", title="----------")
fig.show()

【问题讨论】:

  • 我觉得你需要this

标签: python pandas plotly


【解决方案1】:

没有比这更有效的了:

df['x'].plot(kind = 'hist')

不,这不是 matplotlib,而是使用 plotly 作为后端直接从 pandas 数据帧构建的图形。是的,太棒了!

完整代码:

import random
import pandas as pd
pd.options.plotting.backend = "plotly"
random.seed(7)

df = pd.DataFrame({'x':[random.choice(list('abcde')) for i in range(25)]})
fig = df['x'].plot(kind = 'hist')
fig.layout.bargap = 0
fig.show()

【讨论】:

  • 虽然这很有效,但直方图的 x 轴值需要至少排序,如果不是数字的话。此外,y 轴值需要是连续的。这里,x 轴是分类的,y 轴是离散的。所以我们需要一个条形图或柱形图,而不是直方图。
【解决方案2】:

回答我自己的问题。

我通过将 value_counts(returns a Series) 的结果转换为 pd DataFrame 找到了解决方案。参考:SO question and answers

import plotly.express as px

new_df = df['<col_name>'].value_counts().rename_axis('<col_name>').reset_index(name='counts')

fig = px.bar(new_df, x="<col_name>", y="counts", color="counts", title="----------")
fig.show()

【讨论】:

    【解决方案3】:

    您可以使用hist()轻松获取,例如:

    df['<col_name>'].hist()
    

    你还可以看到绝对频率。

    另一种方法是:

    df['<col_name>'].value_counts().plot(kind='bar')
    

    【讨论】:

    • 谢谢,但我想使用 Plotly 而不是 Pandas 内置的东西
    【解决方案4】:

    应该能够使用结果的 .index 为您提供 x 轴的值和 y 轴的系列本身。

    另外,我认为使用 df['col_name'].value_counts() 可能是你想在这里使用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 2017-04-04
      相关资源
      最近更新 更多