
本文详细阐述了在pandas数据框中实现多级排名(即根据主分数排名,当主分数相同时,依据次级分数进行排名,以此类推)并处理并列值的方法。通过引入一个巧妙的权重加和策略,将多个排序列融合成一个综合得分,并结合`rank()`函数的`method='dense'`参数,高效且准确地实现了复杂的层级排名逻辑,确保了相同综合得分的条目获得相同的排名。
在数据分析和处理中,对数据进行排名是一项常见操作。然而,当排名规则涉及多个优先级不同的列(即存在“并列打破”机制)时,传统的单一列排名方法就显得力不从心。例如,我们可能需要根据“总分”进行排名,如果总分相同,则根据“表现分”排名,如果表现分也相同,则最后根据“努力分”排名。此外,对于所有排名依据都完全相同的条目,它们应被赋予相同的排名。本文将介绍一种高效且易于理解的权重加和方法来解决这类多级排名问题。
假设我们有一个Pandas DataFrame,其中包含多个分数列,我们需要根据这些分数生成一个综合排名。具体的排名规则如下:
以下是我们的初始DataFrame示例:
import pandas as pd
df = pd.DataFrame({
"DScore": [2, 2, 3, 4, 5],
"EScore": [6, 7, 9, 9, 10],
"Total Score": [17, 15, 15, 23, 25]
})
print("原始DataFrame:")
print(df)输出:
原始DataFrame: DScore EScore Total Score 0 2 6 17 1 2 7 15 2 3 9 15 3 4 9 23 4 5 10 25
我们的目标是生成一个名为Rank的新列,其结果应符合上述排名逻辑。
解决多级排名并处理并列值的关键在于将所有排序列巧妙地整合为一个单一的、具有层级区分能力的综合分数。这可以通过为次级和再次级排序列分配足够小的权重,然后将其加到主排序列上实现。
核心思想是创建一个“虚拟”的综合得分列,该列能够反映所有排名的优先级。我们通过将次级排序列(如EScore)乘以一个非常小的权重(例如0.01),并将其加到主排序列(Total Score)上。同样,再次级排序列(如DScore)乘以一个更小的权重(例如0.0001),再加到结果上。
选择权重时需要遵循以下原则:
对于本例中的整数分数,0.01和0.0001这样的权重通常是合适的。
在创建了综合得分后,我们可以使用Pandas DataFrame的rank()方法来计算排名。rank()方法提供了几个关键参数来满足我们的需求:
df['Combined_Score'] = df['Total Score'] + df['EScore'].mul(0.01) + df['DScore'].mul(0.0001)
df['Rank'] = df['Combined_Score'].rank(ascending=False, method='dense')
df['Rank'] = df['Rank'].astype('int')df = df.drop(columns=['Combined_Score'])
import pandas as pd
# 初始DataFrame
df = pd.DataFrame({
"DScore": [2, 2, 3, 4, 5],
"EScore": [6, 7, 9, 9, 10],
"Total Score": [17, 15, 15, 23, 25]
})
print("原始DataFrame:")
print(df)
# 应用权重加和方法计算排名
# 1. 将EScore和DScore乘以适当的权重,并加到Total Score上
# 权重选择需确保:
# - EScore * 0.01 的最大值 < Total Score 的最小有效差值
# - DScore * 0.0001 的最大值 < EScore * 0.01 的最小有效差值
df['Rank'] = df['Total Score'].add(df['EScore'].mul(0.01)).add(df['DScore'].mul(0.0001))\
.rank(ascending=False, method='dense').astype('int')
print("\n处理后的DataFrame及排名:")
print(df)输出结果:
原始DataFrame: DScore EScore Total Score 0 2 6 17 1 2 7 15 2 3 9 15 3 4 9 23 4 5 10 25 处理后的DataFrame及排名: DScore EScore Total Score Rank 0 2 6 17 3 1 2 7 15 4 2 3 9 15 4 3 4 9 23 2 4 5 10 25 1
从结果可以看出:
通过这种权重加和的策略,我们能够优雅地处理Pandas数据框中涉及多个排序列和并列值处理的复杂排名场景,生成符合业务逻辑的精确排名结果。
以上就是Pandas数据框多级排名与并列值处理:基于权重法的解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号