Pandas DataFrame Rank 方法

Beginner

介绍

在本实验中,你将学习如何在 Pandas 中使用 DataFrame.rank() 方法为 DataFrame 中的数据分配排名。rank() 方法沿着指定的轴(可以是索引轴或列轴)提供从 1 到 n 的数值排名。这使你可以根据特定列确定 DataFrame 中值的排名。

虚拟机提示

虚拟机启动完成后,点击左上角切换到 Notebook 选项卡以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟,直到 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时可以询问 Labby。实验结束后提供反馈,我们将及时为你解决问题。

创建 DataFrame 并对列进行排名

首先,让我们创建一个 DataFrame,并使用 rank() 方法为 DataFrame 中的某一列分配排名。在这个例子中,我们将对 'Profit' 列进行升序排名。

## 导入 pandas 库
import pandas as pd

## 创建一个 DataFrame
df = pd.DataFrame({
    'Product_Id': [1001, 1002, 1003, 1004],
    'Product_Name': ['Coffee powder', 'Black pepper', 'rosemary', 'Cardamom'],
    'customer_Name': ['Navya', 'Vindya', 'pooja', 'Sinchana'],
    'ordered_Date': ['16-3-2021', '17-3-2021', '18-3-2021', '18-3-2021'],
    'ship_Date': ['18-3-2021', '19-3-2021', '20-3-2021', '20-3-2021'],
    'Profit': [750, 652.14, 753.8, 900.12]
})

## 使用 rank() 方法为 'Profit' 列分配排名
df['ranked_profit'] = df['Profit'].rank()

## 显示 DataFrame
df

对列进行降序排名

接下来,我们将修改步骤 1 中的示例,将 ascending 参数设置为 False。这将使列按降序排名。

## 导入 pandas 库
import pandas as pd

## 创建一个 DataFrame
df = pd.DataFrame({
    'Product_Id': [1001, 1002, 1003, 1004],
    'Product_Name': ['Coffee powder', 'Black pepper', 'rosemary', 'Cardamom'],
    'customer_Name': ['Navya', 'Vindya', 'pooja', 'Sinchana'],
    'ordered_Date': ['16-3-2021', '17-3-2021', '18-3-2021', '18-3-2021'],
    'ship_Date': ['18-3-2021', '19-3-2021', '20-3-2021', '20-3-2021'],
    'Profit': [750, 652.14, 753.8, 900.12]
})

## 使用 rank() 方法为 'Profit' 列分配降序排名
df['ranked_profit'] = df['Profit'].rank(ascending=False)

## 显示 DataFrame
df

使用不同方法对列进行排名

如果 DataFrame 中包含重复值,你可以使用不同的方法对列进行排名。

  • 'average' 方法为重复值分配平均排名。
  • 'min' 方法为重复值分配最低排名。
  • 'max' 方法为重复值分配最高排名。
  • 'first' 方法按照重复值在 DataFrame 中出现的顺序分配排名。
  • 'dense' 方法与 'min' 类似,但排名在组之间始终递增 1。
## 导入 pandas 库
import pandas as pd

## 创建一个 DataFrame
df = pd.DataFrame({
    'column_1': [1, 3, 3, 4, 7],
    'column_2': [1, 2, 3, 4, 5]
})

## 使用 rank() 方法并指定不同的方法
df['average_rank'] = df['column_1'].rank(method='average')
df['min_rank'] = df['column_1'].rank(method='min')
df['max_rank'] = df['column_1'].rank(method='max')
df['first_rank'] = df['column_1'].rank(method='first')
df['dense_rank'] = df['column_1'].rank(method='dense')

## 显示 DataFrame
df

对包含空值的列进行排名

如果 DataFrame 中包含空值(NaN),你可以使用 na_option 参数来指定空值的排名方式。

  • 如果 na_option 设置为 'keep',空值将被分配为 NaN 排名。
  • 如果 na_option 设置为 'top',空值将被分配为最小排名。
  • 如果 na_option 设置为 'bottom'ascending=True,空值将被分配为最高排名。
## 导入 pandas 库
import pandas as pd
import numpy as np

## 创建一个包含空值的 DataFrame
df = pd.DataFrame({
    'column_1': [1, 3, np.nan, 4, np.nan],
    'column_2': [1, 2, 3, np.nan, np.nan]
})

## 使用 rank() 方法并指定不同的 na_option 参数
df['keep_rank_Nan'] = df['column_2'].rank(na_option='keep')
df['Top_rank_Nan'] = df['column_2'].rank(na_option='top')
df['Bottom_rank_Nan'] = df['column_1'].rank(na_option='bottom')

## 显示 DataFrame
df

总结

在本实验中,你学习了如何使用 Pandas 中的 DataFrame.rank() 方法为 DataFrame 中的数据分配排名。你可以指定不同的参数,例如 axismethodnumeric_onlyna_optionascendingpct,以自定义排名过程。rank() 方法对于识别列中值的位置以及根据排名对数据进行排序非常有用。