python Pandas.rank() 排名函数详解

本文详细解释了Pandas的rank()函数的各种参数,包括method(如min、max、first和dense)、ascending(升序/降序)、na_option(处理缺失值)和pct(返回百分比排名)。通过实例展示了不同设置下的排名效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pandas.rank() 函数详解

一、参数解析

  • method:指定排名时的策略。
    • 默认值为 'average',表示相同值的项将会获得平均排名。
    • 可选的取值还包括
      • 'min':相同值的项将获得最小排名;
      • 'max':相同值的项将获得最大排名;
      • 'first':相同值的项将获得第一次出现时的排名;
      • 'dense'。相同值的项将获得连续排名。
  • ascending:指定排名的顺序。
    • 默认值为 True,升序。
    • 设置为 False 降序。
  • na_option:指定如何处理缺失值(NaN)。
    • 默认值为 'keep',缺失值不参与排名。
    • 设置为 'top' 则将缺失值放在排名结果的顶部。
    • 设置为 'bottom' 则将缺失值放在排名结果的底部。
  • pct:指定是否返回百分比排名。
    • 默认值为 False 表示返回实际的排名值。
    • 设置为 True 则返回相对于总项数的百分比排名值。

二、案例分享

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma', 'Frank'],
        'Score': [90, 85, 85, 75, None, 78]}
df = pd.DataFrame(data)

在这里插入图片描述

默认排名
  • 升序、忽略缺失值;
  • 遇到相同数值(如score=85),排名会平分
df['Rank'] = df['Score'].rank()

在这里插入图片描述

降序: ascending = False
df['Rank'] = df['Score'].rank(ascending=False)

在这里插入图片描述

method = 'min'
  • 相同值的项将获得最小排名;
  • 此处相同值为85,占排名3、4位,取最小3;
  • 此时排名会出现断层
df['Rank'] = df['Score'].rank(method='min')

在这里插入图片描述

method = 'max'
  • 相同值的项将获得最大排名;
  • 此处相同值为85,占排名3、4位,取最大4;
  • 此时排名会出现断层
df['Rank'] = df['Score'].rank(method='max')

在这里插入图片描述

method = 'first'
  • 相同值的项将获得第一次出现时的排名;
  • 此处相同值为85,占排名3、4位,Name=Bob出现在前,Name=Charlie出现在后;
  • 此时排名不会出现断层
df['Rank'] = df['Score'].rank(method='first')

在这里插入图片描述

method = 'dense'
  • 相同值的项将获得连续排名;
  • 此时排名不会出现断层
df['Rank'] = df['Score'].rank(method='dense')

在这里插入图片描述

na_option='bottom'
  • 缺失值参与排名;
  • 缺失值排名靠后
df['Rank'] = df['Score'].rank(na_option='bottom')

在这里插入图片描述

pct = True
  • 返回百分比排名,如此处score=75排名第1(升序),总项数是5,1/5=0.2;
  • 该参数可以扩展的实际需求:求销售额Top20的商品等
df['Rank'] = df['Score'].rank(pct=True)

在这里插入图片描述

### Pandas Rank 函数详解 #### 语法说明 `DataFrame.rank()` 方法用于计算数据框中每列数值的排名。此方法支持多种参数配置来调整排名方式,例如处理平局的方法、百分位数转换以及缺失值的处理等[^1]。 - **axis**: {0 or ‘index’, 1 or ‘columns’}, default 0 表示沿哪个轴进行排名。如果设置为 `0` 或 `'index'` 则按列排名;如果是 `1` 或 `'columns'` 将按照行来进行排名。 - **method**: {'average', 'min', 'max', 'first', 'dense'}, default 'average' 定义当遇到相同值时如何分配等级: - `max`: 赋予最大可得的位置; - `first`: 按照出现顺序给予不同的名字; - `dense`: 类似于 min ,但是连续编号。 - **numeric_only**: bool, default None 如果设为 True,则仅考虑数字类型的列(float64 和 int64),对于非数值型的数据会自动跳过不参与排名运算。 - **na_option**: {'keep', 'top', 'bottom'} 控制 NaN 值在排序中的位置,默认保持不变 (`keep`) 。可以指定NaN位于顶部(`top`)或底部(`bottom`)。 - **ascending**: boolean, default True 排序方向,升序(True)还是降序(False)。 - **pct**: boolean, default False 是否返回的是各元素占总数的比例而非实际排名。 #### 示例代码展示 以下是几个简单的例子展示了不同选项下 `rank()` 的应用: ```python import pandas as pd # 创建一个简单 DataFrame df = pd.DataFrame({ "A": [1, 7, 5, 3], "B": [2, 9, 8, 4] }) print("原始数据:") print(df) # 默认情况下使用 average 方法处理同分情况并按升序排列 result_avg_asc = df.rank(method='average') print("\n默认平均法升序排名:") print(result_avg_asc) # 使用 first 方法处理同分项,并按降序排列 result_first_desc = df.rank(method='first', ascending=False) print("\n首次出现优先降序排名:") print(result_first_desc) # 对单个 Series 进行排名 series_example = pd.Series([1, 7, 5, 3]) single_series_ranking = series_example.rank() print(f"\n单一序列 '{series_example.name}' 的排名:\n{single_series_ranking}") ``` 上述代码片段分别演示了基本的排名功能及其变体形式,包括但不限于针对整个表格的整体排名和单独对某一列表内项目做独立评估的情况[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值