我有以下国家和类别的数据。我试图用matplotlib绘制总数和不同百分比。
data = [['FL', 2], ['AR', 0], ['CA', 0], ['CA', 1], ['AR', 1], ['FL', 0], ['CA', 0], ['CA', 1], ['AR', 2], ['FL', 1],
['AR', 0], ['FL', 2], ['CA', 1], ['FL', 1], ['AR', 1], ['AR', 2], ['AR', 1], ['FL', 2], ['CA', 2], ['FL', 0],
['FL', 2], ['AR', 2], ['AR', 1], ['FL', 0], ['AR', 1], ['CA', 0], ['CA', 0], ['CA', 2]]
columns = ['State', 'Class']
df = pd.DataFrame(data=data, columns=columns)
df.groupby(['State', 'Class']).size()
计数是使用以下代码绘制的:
df.groupby(['State', 'Class']).size().to_frame('Size').unstack(level=-1).sort_values([('Size', 0)], ascending=False).plot(kind='bar', rot=45, figsize=(8,8), fontsize=10)
plt.legend(['Class 0', 'Class 1', 'Class 2'], prop ={'size' : 15})
同样,还需要绘制百分比(州级、类级和总体级)。我要找的是:
你能帮我用一种优雅的方法来做吗?
下面是我目前的解决方案。需要绘制StatePercent、ClassPercent和OverallPercent (Pic#3)。我的愿望是在不创建列的情况下生成这3个图,就像它是如何为'Size‘(Pic#2)所做的那样。(在实际的数据框架中,我有其他列的100多个;因此,如果可能的话,寻找不创建不必要列的选项。这三列仅用于统计数据,而不用于任何处理)
Pic#1 -数据帧
Pic#2 -在不创建df列的情况下绘制“大小”
Pic#3 -需要绘制StatePercent、ClassPercent和OverallPercent值,如下所示
发布于 2022-11-20 22:49:00
我想你的术语是这样定义的。
状态S和类C= 100 *(C类和C类的记录计数)/(状态S和C类的记录计数)/(状态S的记录计数以及状态S和C类的classes)
您可以像下面的示例一样使用apply()
和sum()
。
df0 = df.groupby(['State', 'Class']).size().to_frame('Size')
df1 = df0.unstack(level=1).apply(lambda row: 100*row/sum(row), axis=1)
df2 = df0.unstack(level=0).apply(lambda row: 100*row/sum(row), axis=1)
df3 = 100*df0.unstack(level=1)/df0.sum().sum()
您可以分别为案例1、2和3绘制df1、df2和df3。
https://stackoverflow.com/questions/74495984
复制相似问题