使用Plotly绘制Pandas数据框列的计数

4

我有一个数据框列,其中的数据仅为分类数据(例如 [a,b,c,a,a,d,c,b 等])。我想使用 Plotly 计数条形图绘制这些数据的计数。

我已经使用 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()

我认为你需要这个 - r-beginners
4个回答

4

再也没有比这更有效率的了:

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()

1
尽管这很有效,但直方图的 x 轴值需要至少有序,如果不是数字的话。此外,y 轴值需要连续。在这里,x 轴是分类的,y 轴是离散的。因此我们需要一个条形或柱状图,而不是直方图。 - mj_whales

3

回答我自己的问题。

我发现一个解决方法,将value_counts(返回Series)的结果转换为pd DataFrame。参考:SO问题和答案

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()

1

应该能够使用结果的 .index 来为 x 轴提供值,并将系列本身用作 y 轴。

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


0

你可以轻松地使用hist()来获取它,例如:

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

而且你还可以看到绝对频率。

另一种做法是:

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

2
谢谢您的建议,但我想使用Plotly而不是Pandas内置的内容。 - Ali H. Kudeir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接