cjavapy编程之程

Python pandas.DataFrame.rank函数方法的使用

pandas.DataFrame.rank() 方法用于对 DataFrame 中的元素进行排名(秩次)。它可以按行或列计算每个元素的排名,支持处理并列值(可设置并列策略),也支持缺失值处理。数据分析中常用于了解数据的相对位置、进行特征工程或者筛选数据。本文主要介绍一下Pandas中pandas.DataFrame.rank方法的使用。

DataFrame.rank(self: ~FrameOrSeries, axis=0, method: str = 'average', numeric_only: Union[bool, NoneType] = None, na_option: str = 'keep', ascending: bool = True, pct: bool = False) → ~FrameOrSeries

对沿指定轴的数值数据进行排名(从 1 到 n)。

默认情况下,对于具有相同值的元素,分配它们对应排名的平均值作为最终排名。

参数:

axis:{0'index'1'columns'},默认0

直接排名的索引。

method{'average''min''max'

'first''dense'}

默认为'average'

如何对具有相同值(即ties)的记录组进行排名:

1) average:组的平均等级

2) min:组中最低的排名

3) max:组中最高等级

4) first : 按排列顺序排列,依次排列

5) dense:类似于 ‘min’,但组之间的排名始终提高1

numeric_onlybool, 可选

对于DataFrame对象,如果设置为True,

则仅对数字列进行排名。

na_option{'keep','top','bottom'}

默认为'keep'

如何对NaN值进行排名:

1) keep:将NaN等级分配给NaN

2) top:如果升序,则将最小等级分配给NaN

3) bottom:如果升序,则将最高等级分配给NaN值。

ascendingbool,默认为True

元素是否应该按升序排列。

pct:bool,默认为False

是否以百分比形式显示返回的排名。

返回值:

与调用者相同的类型

返回以数据等级作为值的SeriesDataFrame

例子

1)基本使用(按列排名)

import pandas as pd

df = pd.DataFrame({
    'math': [90, 80, 80, 70],
    'english': [88, 90, 85, 70]
})

print(df.rank())

2)使用不同 method 策略

import pandas as pd

df = pd.DataFrame({
    'math': [90, 80, 80, 70],
    'english': [88, 90, 85, 70]
})

print(df.rank(method='min'))

3)按行排名

import pandas as pd

df = pd.DataFrame({
    'math': [90, 80, 80, 70],
    'english': [88, 90, 85, 70]
})

print(df.rank(axis=1))

4)返回百分比排名

import pandas as pd

df = pd.DataFrame({
    'math': [90, 80, 80, 70],
    'english': [88, 90, 85, 70]
})

print(df.rank(pct=True))

5)rank() 方法各种用法对比

使用上述参数的方法的行为:

  • default_rank:这是不使用任何参数而获得的默认行为。
  • max_rank:设置method = 'max'具有相同值的记录将使用最高排名进行排名(例如:由于'cat''dog'都位于第二和第三位置,因此分配了rank 3。)
  • NA_bottom:选择na_option = 'bottom',如果存在具有NaN值的记录,则将它们放在排名的底部。
  • pct_rank:设置pct = True时,排名以百分等级表示。

import pandas as pd
import numpy as np

# 创建示例 DataFrame
df = pd.DataFrame({
    'Animal': ['cat', 'penguin', 'dog', 'spider', 'snake'],
    'Number_legs': [4, 2, 4, 8, np.nan]
})

# 不同 ranking 设置的列
# 默认:method='average'
df['default_rank'] = df['Number_legs'].rank() 
# 并列时取最大名次
df['max_rank'] = df['Number_legs'].rank(method='max')  
# NaN 作为最大名次处理
df['NA_bottom'] = df['Number_legs'].rank(na_option='bottom')  
# 返回排名百分比
df['pct_rank'] = df['Number_legs'].rank(pct=True)  
# 打印结果
print(df)

推荐阅读
cjavapy编程之路首页