gpt4 book ai didi

python - 如何使 pandas 分类堆积条形图比例达到 100%

转载 作者:行者123 更新时间:2023-12-01 00:56:05 28 4
gpt4 key购买 nike

我正在尝试根据不同类别的计数(我的数据框中的“类”列)生成堆积条形图。

我的数据还按另一个类别(“STRAT”列)分组。

我绘制了实际数字,但我想得到这些数字占总数 100% 的比例。 IE。因此,对于每个“STRAT”类别,所有条形图都是图表的完整高度,就像垂直饼图一样。

像这样:enter image description here

以下是我的尝试和结果。

样本是大型数据集的一小部分。

import pandas as pd

df_test= pd.read_excel('df.xlsx')

df_test

From To Interval (m) Class STRAT Total %S
308 309 1 PAF CBC 4.15
309 310 1 PAF CBC 3.76
320 321 1 UC CBC 0.85
330 331 1 UC CBC 0.698
342 343 1 NAF LBB 0.259
376 377 1 NAF LBB 0.395
412 413 1 UC LBB 1.19
51 52 1 PAF UBB 2.27
420 420.5 0.5 UC UAB 2.85
189 190 1 PAF LBB 1.52
520 521 1 NAF UAB 1.45
632 633 1 NAF UAB 0.0615
644 645 1 NAF UAB 0.178


df_test.groupby(['STRAT', 'Class']).size().unstack().plot.bar(stacked=True)

这给了我一个堆积条形图,但它没有缩放到 100%

stacked bar chart

我找不到一种巧妙的方法将“Class count/total_counts”计算放入代码中以获取百分比而不是数字。

最佳答案

使用 matplotlib 可以做很多事情来强制缩放 y 轴,以便将所有内容标准化为 100%,如下所示: 100% Stacked Bar Chart in MatPlotLib

但是,您的问题可以更简单地解决。

如果这是包含两个关键列(Class 和 STRAT)的数据框:

import pandas as pd
import numpy as np
df = pd.DataFrame({'Class': 2*['a', 'b', 'c', 'd'],'STRAT': ['x', 'y', 'x', 'z','y','x','z','w'],'value': np.random.randint(0, int(1e2),8)})

然后您可以通过以下方式轻松计算 %ges:

df_pct = (df.groupby(['STRAT','Class'])['value'].count()/df.groupby(['STRAT'])['value'].count())

您最终可以完全按照代码中的方式进行绘图:

df_pct.unstack().plot.bar(stacked=True)

enter image description here

关于python - 如何使 pandas 分类堆积条形图比例达到 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56251848/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com