Pandas中 的 rank() 函数 和 groupby 的 rank() 函数用法

一、pandas中的rank()函数

首先随机初始化一组数,然后

data = pd.Series([1,2,3,4,5])
print(data)
data = data.rank()
print(data)

这里的rank()函数打印出来虽然和原数组没区别,但是这里rank表示的是次序,所以这里的1.0,2.0表示的是第一名和第二名

如果有重复值的话

data = pd.Series([1,1,2,2,3,3,4,4,5])
print(data)
data = data.rank()
print(data)

 这里的的数组首先是有序的,所以数组里的第一个1的名次是第一名,表示1.0,第二个1的名次是第二名,表示2.0,重复值的话,默认求平均,所以它俩的名次平均值就是(1.0+2.0)/2 = 1.5,同理,第一个2是第三名,表示3.0,第二个2是第四名,表示4.0,平均值是(3.0+4.0)/2 = 3.5.

rank函数提供了method的参数,通过设置method参数,可以控制自己想要的排名方式。
如果说这个rank函数要解决的是考试排名的问题,现在出现了有两个同学并列第一的情况:

method='average' (默认设置):那么这两个人就占据了前两名,分不出谁第 1,谁第 2,就把两人的名次算个平均数,都算 1.5 名,这样下一个人就是第3名。

method='max':两人并列第 2 名,下一个人是第 3 名。

method='min':两人并列第 1 名,下一个人是第 3 名。

method='dense':两人并列第 1 名,但下一个人是第 2 名。

method='first':那么试卷先被改出来的人是第 1 名,试卷后被改出来的是第 2 名。(这个例子并不严谨,实际会按照本来序列的显示顺序先后来排名)
 

 二、groupby中的rank()函数

groupby是聚合函数,对于某一列或多列进行聚合,可以看Pandas教程 | 超好用的Groupby用法详解 - 知乎

进行学习

 假设随机初始化几列数

import pandas as pd
list1 = [1, 3, 1,0,7,4,0]
list2 = [3, 3, 2,0,4,4,5]
list3 = [3, 3, 3,3,4,4,6]
df1 = pd.DataFrame({'col1':list1,'col2':list2,'col3':list3})
print(df1)

df1 = df1.groupby(['col3']).rank(ascending=False)
print(df1)

 我们对col3进行聚合,然后再排名,其中ascending=False表示降序,打印一下结果

 首先看col1这一列。col1和col3可以分为三块,分别是

 由于是降序,那么排完序之后就变成了

 注意:这里的排序是每一块内单独排序,所以rank()函数的排名也是每一块的单独排名。

对于第一个块中,3现在是第一名,表示为1.0,第一个1是第二名,表示为2.0,第二个1是第三名,表示为3.0,method默认为平均,所以它俩的名次是(2.0+3.0)/2 = 2.5,0是第四名,表示为4.0。所以结果为

它这个结果是将排序后的顺序放在一开始分块后的结果上,意思就是  

顺序是放在   这个结果上面,所以结果是

对于第二个块中,7是第一名,表示为1.0,4是第二名,表示为2.0,所以结果为

 其他都同理。

其中groupby的rank函数也有method参数,用法与rank函数相同,这里不做介绍。

参考:

Pandas | rank()函数_Code_Porter的专栏-优快云博客_pandas rank函数

Pandas —— rank( )函数进行排名_starter_____的博客-优快云博客_dataframe rank

Pandas教程 | 超好用的Groupby用法详解 - 知乎

<think>我们已有多个关于pandasgroupby用法的引用资料,现在需要整理一个清晰的教程。根据引用内容,我们可以总结如下:1.引用[1]提到groupby与aggregate结合使用,并提到expandmax函数记录组当前最大值。2.引用[2]提到自定义函数pandas中的应用,包括分组后应用自定义函数。3.引用[3]展示了aggapply的用法,以及多级索引的处理。4.引用[4]给出了一个DataFrame示例,用于分组操作。我们将结合这些资料,分步骤讲解groupby的使用方法,包括:-基本分组-聚合函数(agg)-转换(transform)-过滤(filter)-应用自定义函数(apply)注意:需要按照用户要求使用数学公式格式代码块。</think> ### Pandas `groupby` 函数使用详解 `groupby` 是 Pandas 的核心功能,用于按指定列或条件分组数据,结合聚合/转换函数实现复杂分析。以下是分类示例关键操作: --- #### **1. 基础分组与聚合** 引用示例[^4]数据: ```python import pandas as pd data = { '姓名': ['小明', '小红', '小明', '小红', '小明', '小红', '小明'], '班级': ['A', 'A', 'B', 'B', 'A', 'B', 'B'], '成绩': [80, 90, 85, 88, 92, 95, 89] } df = pd.DataFrame(data) ``` **示例 1:单列分组 + 聚合** ```python # 按姓名分组,计算每人平均成绩 df.groupby('姓名')['成绩'].mean() ``` 输出: ``` 姓名 小明 86.5 小红 91.0 ``` **示例 2:多列分组** ```python # 按班级姓名分组,统计成绩最小值 df.groupby(['班级', '姓名'])['成绩'].min() ``` 输出: ``` 班级 姓名 A 小明 80 小红 90 B 小明 85 小红 88 ``` --- #### **2. 高级聚合操作** **示例 3:多函数聚合(`agg`)** ```python # 引用[^3]:对成绩同时计算均值、最小值、最大值 df.groupby('姓名')['成绩'].agg(['mean', 'min', 'max']) ``` 输出: ``` mean min max 姓名 小明 86.5 80 92 小红 91.0 88 95 ``` **示例 4:自定义聚合函数** ```python # 计算成绩极差(最大值-最小值) df.groupby('班级')['成绩'].agg(lambda x: x.max() - x.min()) ``` 输出: ``` 班级 A 12 B 10 ``` --- #### **3. 分组转换与过滤** **示例 5:转换(`transform`)** ```分组后保持原数据形状,计算组内标准化成绩$$ \frac{x - \mu}{\sigma} $$ ```python df['标准化成绩'] = df.groupby('班级')['成绩'].transform( lambda x: (x - x.mean()) / x.std() ) ``` **示例 6:过滤(`filter`)** ```python # 保留班级平均分>85的组 df.groupby('班级').filter(lambda g: g['成绩'].mean() > 85) ``` --- #### **4. 复杂应用(`apply`)** **示例 7:分组后自定义处理**[^2] ```python # 为每个班级添加排名 def add_rank(group): group['排名'] = group['成绩'].rank(ascending=False) return group df.groupby('班级').apply(add_rank) ``` **示例 8:组内最大值标记**[^1] ```python # 标记每组的最高分 df['是否最高'] = df.groupby('班级')['成绩'].transform( lambda x: x == x.max() ) ``` --- ### **关键概念总结** | 操作 | 方法 | 说明 | |-------------|--------------|-----------------------------| | 分组 | `groupby()` | 按指定列/条件分割数据 | | 聚合 | `agg()` | 对组内数据执行求/均值等操作 | | 转换 | `transform()`| 返回与原始数据相同形状的结果 | | 过滤 | `filter()` | 按条件筛选组 | | 自定义处理 | `apply()` | 应用任意函数处理每组数据 | > 💡 提示:结合`reset_index()`可解除多级索引[^3],如: > `df.groupby(['班级','姓名']).mean().reset_index()` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值