前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >懂Excel轻松入门Python数据分析包pandas(二十二):排名

懂Excel轻松入门Python数据分析包pandas(二十二):排名

作者头像
咋咋
发布2021-09-01 14:43:15
3530
发布2021-09-01 14:43:15
举报
文章被收录于专栏:数据大宇宙数据大宇宙

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

前言

排名功能在日常工作是比较常用的,学生成绩排名、Kpi 绩效排名等等,可能有些小伙伴不知道存在许多排名方式的。本文我们来看看 pandas 中怎么做到 Excel 中支持的各种排名方式,还有 Excel 也不支持的排名方式!

> 本文使用的是 Excel 2010 版本

Excel 中的排名

直接列出本文所有涉及的排名,下图为 Excel 中的函数 + 透视表实现方式:

- 前4列是原始数据,后4列是以语文成绩列(B列)做排名的结果,

- E列 与 F列:美国式排名,前3个人是并列第一名,按道理是给他们3个人分别 1、2、3 名次,但是他们成绩一样,不可能分出高下,因此,此方式取他们组内最小的名次(1),并且2和3名次被占用,后面的人不能使用剩下的名次(注意第5个人的名次是4)

- G列:中国式排名,基本原理与美国式排名一致,但是名次2和3没有被占用,因此后面的人得到名次2

- H列:平均排名,同排名组内求平均作为他们的统一排名

- I列:如果希望按照 语文、数学、英文 3科成绩综合排名,Excel 中需要复杂的数组公式,这里不做低效事情。下面直接介绍 pandas 的实现

- J列:同上

一个方法打天下

pandas 中讲究简洁(简单直接,语义清晰),所有上面说的排名都是统一使用 rank 方法实现。

先看"按出现次序"的排名:

- 行2:调用 rank 方法,得到排名结果

- 参数 method='first' ,为按出现次序排名

- 参数 ascending=0 ,按 大到小 判断

显然,这种排名是没啥作用,因为上面的 A2、A3 这2人要吵起来了,凭啥我不能拿第一!

这时候,给他们一致的名次是很重要,下面是平均排名法:

- 参数 method 的默认值为 average ,因此不设置此参数即可实现

名次被平均了,中间缺少了一些名次,感觉怪怪的,那看看美国式排名:

- 参数 method='min',实际所谓的美国式排名,就是把他们的顺序名次取最小,作为他们的统一名次

"但是美国式排名中间还是没有了一些名次呀,只是显示的名次是比较小,看来感觉好看一些而已"

那就用中国式排名就好了:

参数 method='dense',组内名次仍然取最小值,但是组内其余的名次仍然可以被后面的人使用

"是挺方便的,但是有时候名次是要结合多个科目的成绩而定(比如先看语文成绩,相同则看数学,再相同最后看英文成绩),在 pandas 中是不是很复杂?"

在 python 中刚好有一种数据结构是使用这种递进比较规则,这就是元祖。

此时我们只需要考虑怎么把多列成绩结合成一个元祖:

- 实际代码较之前的案例代码大同小异

- 行4:df[cols].apply(tuple, axis=1),按照语数英顺序,生成一个元祖列。接着按照正常排名方式处理即可

- 从结果可以看到,前3人语文成绩一样的情况下,分别通过数学以及英文成绩作为排名依据。如果你希望修改3科成绩的比较次序,只需要简单修改 行3 的代码即可

更多复杂的高级排名应用,请关注我的 pandas 专栏,像 "带权重比较名次" 等案例,应有尽有!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据大宇宙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档