python - 在数据帧中的好坏堆叠条上显示前 3 个 'bad' 系统(按一个值排序,但在图表上显示两个值)

标签 python pandas matplotlib

我有一个包含变更请求 (CR)、系统、所有者和评估(示例)的数据框

CR  |system |  owner  |  assessment
A1  |Alpha  |  Alice  |  good
A2  |Alpha  |  Alice  |  good
A3  |Alpha  |  Alice  |  bad
B2  |Bravo  |  Bob    |  bad
B3  |Bravo  |  Bob    |  good
B4  |Bravo  |  Bob    |  bad

我正在尝试创建评估最差的前 3 个系统的 matplotlib 图,但在 pyplot 中显示具有好值和坏值的堆积条形图。

这段代码(CR已被删除)给了我正确的图形,但计数是错误的,因为它分别计数好和坏。

table = df.groupby(['system','owner']).assessment.value_counts().nlargest(3)
chart = table.plot.barh(stacked=True, color= ['red','green'], fontsize=12)

表格看起来像(实际摘录):

system                     owner             assessment         
ALPHA                      Alice             good                   75
                                             bad                    60
BRAVO                      Bob               bad                    57

我已经尝试了多种语句来提取前 3 个最差的系统,并显示一个图表,该图表在水平堆叠条上显示好值和坏值,但我似乎无法同时执行这两项操作。

如何对“坏”数字(60 和 57)进行排序,但在同一个堆叠条上显示好(75)和坏(60)?如何显示前 3 个最差的系统(最差的值)?

所以我寻找的堆叠条结果如下所示:

Alpha    BBBBBBBBBGGGGGGGGG
Bravo    BBBBBBBBBBBBBB
Charlie  BBBGGGGGGGG

最佳答案

这解决了我的问题:

print(df.groupby(['system','owner']).Evaluation.value_counts().unstack(level=-1).nlargest(3,columns='bad').stack())

关于python - 在数据帧中的好坏堆叠条上显示前 3 个 'bad' 系统(按一个值排序,但在图表上显示两个值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53521004/

相关文章:

Python:KeyError/IOError 与 urllib.urlopen

python - 将数组从 2d reshape 为 3d

python-3.x - 大数据集,使用 unstack() 时收到 "Unstacked DataFrame is too big, causing int32 overflow"

python - 如何在 Pandas 中的 "day period"上覆盖数据以进行绘图

Python Mechanize 登录帐户 - 表单未提交

python - 具有 2 个 m2m 关系的数据库设计

python - 从 XGBoost 模型中获取实际特征名称

python - Pandas 向前填充破坏顺序的列部分

python - 垂直填充 3d matplotlib 图

python - 如何使用 matplotlib 绘制 3d 高斯分布?