Python学习笔记:pd.rank排序

您所在的位置:网站首页 rank排序函数 Python学习笔记:pd.rank排序

Python学习笔记:pd.rank排序

2023-04-02 19:46| 来源: 网络整理| 查看: 265

一、介绍

Pandas.rank() 函数用于实现对数据的排序,包括顺序排序、跳跃排序和密集排序等。

使用方法:

DataFrame.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)

参数说明:

axis -- 0表示按横轴,1表示按纵轴 method -- 排序方式:average、first、min、max、dense numeric_only -- 是否仅计算数值列 na_option -- 空值处理方式:keep、top、bottom ascending -- 升序、降序 pct -- 排名百分比 二、实操 1.Series排名 method参数:控制排序的模式 import pandas as pd import numpy as np data = pd.Series([8,-5,8,5,3,0,5]) # 1.默认按平均值排序 如果两个数值相同 排名为均值 data.rank() # 2.根据值在原始数据中出现的顺序进行排名 data.rank(method='first') # 3.相同数值的排名取最小值 data.rank(method='min') # 4.相同数值的排名取最大值 data.rank(method='max') # 5.相同数值排名不出现跳跃 连续排序 data.rank(method='dense') ascending参数:默认升序 data.rank(ascending=False) data.rank(method='max', ascending=False) pct参数:显示百分比 data.rank(pct=True) ''' 0 0.928571 # 6/7 1 0.142857 2 0.928571 3 0.642857 4 0.428571 5 0.285714 6 0.642857 dtype: float64 ''' data.rank(method='dense', ascending=False, pct=True) na_option参数:keep、top、bottom data2 = pd.Series([8,-5,8,5,3,np.nan,5]) # 保留空值 data2.rank(method='dense', na_option='keep') # 空值排名第一 data2.rank(method='dense', na_option='top') # 空值垫底 data2.rank(method='dense', na_option='bottom') 2.DataFrame排名 构建测试数据框 df = pd.DataFrame({"class":["语文","语文","语文","语文","语文","数学","数学","数学","数学","数学"], "name":["小明","小苏","小周","小孙","小王","小明","小苏","小周","小孙","小王"], "score":[137,125,125,115,115,80,111,130,130,140]}) df 排序 df1 = df[df['classes'] == '语文'] df2 = df.query("classes == '语文'") df1.loc[:,'rank_average'] = df1['score'].rank(ascending=False) df1['jump_min'] = df1['score'].rank(method='min', ascending=False) df1['jump_max'] = df1['score'].rank(method='max', ascending=False) df1['rank_dense'] = df1['score'].rank(method='dense', ascending=False) df1['rank_first'] = df1['score'].rank(method='first', ascending=False) df1 ''' classes name score rank_average jump_min jump_max rank_dense \ 0 语文 小明 137 1.0 1.0 1.0 1.0 1 语文 小苏 125 2.5 2.0 3.0 2.0 2 语文 小周 125 2.5 2.0 3.0 2.0 3 语文 小孙 115 4.5 4.0 5.0 3.0 4 语文 小王 115 4.5 4.0 5.0 3.0 rank_first 0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 ''' 总分排名 # 添加总分列 df['total_score'] = df.groupby('name')['score'].transform('sum') df['total_dense'] = df['total_score'].rank(method='dense', ascending=False) 3.groupby排名 # 定义一个:提取排名第2的函数 def rank_second(x): return x[x['score'].rank(method='dense', ascending=False) == 2] # 分组之后求排名 df.groupby('classes').apply(rank_second) 三、总结

同 SQL 中的窗口函数(OLAP函数:Online Anallytical Processing)对比:

row_number 顺序排名 -- method='first' rank 跳跃排名 -- method='min' dense_rank 密集排名 -- method='dense' over (partition by col order by col2) -- rank -- dense_rank -- row_number -- sum/avg/count/max/min

参考链接:pandas.DataFrame.rank

参考链接:图解Pandas的排名rank机制

参考链接:关于pandas的rank()函数的一点认识



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3