系列文章:
- -懂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 ,即可得到结果