懂Excel也能轻松入门Python数据分析包pandas(二):高级筛选(下)

2021-09-01 15:19:15 浏览数 (1)

系列文章:

  • -懂Excel也能轻松入门Python数据分析包pandas(二):高级筛选(上)

前言

经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死。后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器—— pandas 。

紧接着上一篇的高级筛选,不过上一篇的例子太简单了,这次来点难度。

数据

继续沿用上一篇的数据:

  • - 某学校的一份考试成绩表(8科成绩)

加载数据

pandas 需要加载 Excel 数据,如下:

复杂过滤

"高于全级平均分的人",Excel 高级筛选的条件区域设置如下:

  • - 这次需要在条件值中使用函数公式
  • - =K2>AVERAGE(K:K) ,你可以想象成,Excel 会遍历每行,遍历时,会把函数公式中的 K2 ,用当前行的值替换

pandas 实现思路是一样的,如下:

上面的需求还是有点简单,再加点料。

"总分高于所在班级平均分的学校",Excel 高级筛选的条件区域设置如下:

  • - 此时不能简单使用 AVERAGE ,这是因为我们需要根据 班级 获得该班级的平均分,这次使用 AVERAGEIF(B:B,B2,K:K)

pandas 实现则显得麻烦点。如下:

  • - .groupby('班级') ,按班级分组
  • - .apply ,对每组查询总分超出平均分的记录。这里的 query 字符串与上一例子是一样的

为难 Excel 的任务

有些任务用 Excel 自带功能则非常繁琐,比如:

"全级中,8科成绩都超出全级平均分的学生"

这任务如果用 Excel 实现,必须逐一对每个科目进行求平均,直接看看 pandas 的实现:

  • - 定义一个方法,这有利于重用逻辑
  • - 前2句,先求出每科平均分
  • - 然后求出每位学生高于平均分的科目数量 count
  • - 最后简单判断一下,即可得到结果

看看调用结果:

这时候,如果需要看 "8科成绩都超出该班级的平均分的学生",则非常简单了:

  • - 这些都是班内的"三好学生"

是不是 so easy?!

来看看有哪些学生需要留堂见家长。

"8科成绩都低于班内平均水平的学生",仍然很简单:

  • - 仅仅添加一个参数 sjs=0 ,即可得到结果

0 人点赞