基于Pandas、Seaborn绘制多站点PT列结果计数条形图的指导求助
实现思路指导
1. 前置准备:定义全量有效结果集合
先把要求的12类有效结果整理成固定列表,方便后续匹配和补全0值:
- 固定字符串类:
['NOT_FINISHED', 'NOT_TESTED', 'TOO_LOW'] - 数值类:150~190之间步长为5的数值,共9个,统一转成字符串格式(避免和数据里的字符串/浮点型数值匹配失败)
- 最终合并成12个元素的
valid_list,后续统计、绘图都按这个列表的顺序处理
2. 数据预处理:统一空值格式
把数据里PT1~PT4列的空字符串、NaN统一替换成标准空值,方便后续判断。
3. 逐行提取最右侧有效值
自定义行处理函数,用pandas的apply方法对每行数据处理:
- 按PT4→PT3→PT2→PT1的顺序依次检查该列的值是否在
valid_list中 - 找到第一个符合要求的值就返回,作为该行的有效结果
- 四列都没有有效值的行返回空,后续直接过滤掉这些行
处理完给数据集新增一列res存储提取到的有效结果,过滤掉res为空的行。
4. 按站点分组统计计数
- 按
Sites字段分组,每组统计res列各值的出现次数 - 统计完成后对每个站点的统计结果用
valid_list重设索引,缺失值补0,保证每个站点的统计结果都包含全部12类有效结果,就算计数为0也保留
5. 分站点绘制条形图
遍历A1、A2、A3三个站点:
- 取出对应站点的12类结果的计数数据
- 用seaborn的
barplot或者matplotlib的bar接口绘图,x轴为有效结果名称,y轴为计数 - 可按需设置x轴标签旋转、图表标题、y轴范围等,避免文字重叠,优化显示效果
小提示
处理PT列的时候统一把所有值转成字符串再匹配,避免出现数值型165.0和字符串型'165'判定为不匹配的问题;Python2.7适配的pandas版本对apply的兼容性很好,不需要写复杂的循环逻辑即可完成行处理。
内容的提问来源于stack exchange,提问作者Boston Co
相关产品推荐
相关产品推荐

