You need to enable JavaScript to run this app. 如何基于已生成的布尔值结果绘制满足四类条件的柱状图
优惠活动
大模型
产品
解决方案
定价
更多

如何基于已生成的布尔值结果绘制满足四类条件的柱状图

多条件学生群体统计与四分类柱形图实现

场景与原始数据

现有pandas DataFrame 结构如下:

Students     Subject       Mark
1            M F           7 4 3 7
2            I             5 6 
3            M F I S       2 3 0 
4            M             2 2 
5            F M I         5 1
6            I M F         6 2 3
7            I M           7

需要按四类学生群体统计人数,绘制对应柱形图:

  • Subject列包含3个及以上独立学科字符
  • Mark列中至少存在一个成绩值为3
  • 同时满足上述两个条件
  • 上述两个条件均不满足

实现步骤

此前生成的布尔判断序列完全可以做计数统计,不需要额外转换格式,具体操作流程如下:

  1. 定义两个独立的判断逻辑,存为独立的布尔 Series 变量:
    # 判断Subject列独立学科数≥3
    cond_subject = df["Subject"].str.count("\w+") >= 3
    # 判断Mark列存在至少一个值为3
    cond_mark = df["Mark"].str.count("3") >= 1
    
  2. 直接利用布尔值的数值特性计算四个类别的样本量:布尔值中True等价于数值1、False等价于数值0,直接对布尔序列求和就能得到满足条件的样本数,比调用value_counts()更简洁:
    • Subject列字符数≥3的样本数:cond_subject.sum()
    • Mark列存在3分的样本数:cond_mark.sum()
    • 同时满足两个条件的样本数:(cond_subject & cond_mark).sum()
    • 两个条件都不满足的样本数:(~cond_subject & ~cond_mark).sum()
  3. 把四个类别的计数整理为标准可绘图结构:
    plot_stats = pd.Series(
        [cond_subject.sum(), cond_mark.sum(), (cond_subject & cond_mark).sum(), (~cond_subject & ~cond_mark).sum()],
        index=["Subject≥3个字符", "Mark存在3分", "同时满足两条件", "两条件均不满足"]
    )
    
  4. 直接调用pandas内置绘图接口生成目标柱形图:
    plot_stats.plot(kind="bar", rot=0, title="不同条件分组的学生数量统计")
    

常见报错说明:如果之前对布尔序列调用方法失败,通常是因为布尔判断结果没有被正确赋值为独立的Series对象,只是临时表达式结果,只要将判断逻辑绑定为明确变量,即可正常使用所有Series支持的方法。

内容的提问来源于stack exchange,提问作者gens_me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.07 09:24:01