Pandas DataFrame 多条件优先级排序与排名


Pandas DataFrame 多条件优先级排序与排名

本文详细讲解了如何在 pandas dataframe 中,根据多个列的优先级来计算排名。通过将次要排序列进行微小加权并叠加到主要排序列上,再结合 `rank(method='dense', ascending=false)` 方法,能够灵活处理多级平局,确保排名结果的准确性和一致性,有效应对复杂的数据排序需求。

在数据分析和处理中,我们经常需要对数据集进行排名。通常情况下,排名是基于单个指标进行的。然而,当存在多个指标,并且需要按照特定优先级来打破平局时,简单的排序或排名函数可能无法直接满足需求。例如,我们可能需要首先依据“总分”进行排名,如果总分相同,则依据“效率分”进行判别,如果效率分也相同,则最终依据“难度分”来确定名次。本教程将介绍一种在 Pandas DataFrame 中实现这种多条件优先级排名的高级方法。

核心概念:加权综合分数法

为了实现多条件优先级排名,一个有效的方法是构建一个“加权综合分数”。其核心思想是:

  1. 主排序键(例如“Total Score”)保持其原始权重。
  2. 次级排序键(例如“EScore”、“DScore”)被赋予极小的权重。这些权重必须足够小,以至于它们在累加到主排序键上时,不会改变因主排序键不同而产生的排名顺序。它们的作用仅仅是在主排序键值完全相同的情况下,才能够通过其微小的差异来打破平局。
  3. 通过这种方式生成的综合分数,将包含所有排序条件的优先级信息。对这个综合分数进行排名,即可得到满足多条件优先级要求的最终排名。

实现步骤

我们将使用一个示例 DataFrame 来演示这一过程。

1. 准备数据

首先,创建一个包含待排名数据的 Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
    "DScore": [2, 2, 4, 4, 5],
    "EScore": [6, 7, 9, 9, 10],
    "Total Score": [17, 15, 23, 23, 25]
})

print("原始 DataFrame:")
print(df)

输出:

原始 DataFrame:
   DScore  EScore  Total Score
0       2       6           17
1       2       7           15
2       4       9           23
3       4       9           23
4       5      10           25

我们的目标是根据 Total Score 降序排名,若 Total Score 相同,则根据 EScore 降序排名,若 EScore 也相同,则根据 DScore 降序排名。

2. 构建加权综合分数

根据上述核心概念,我们将 EScore 和 DScore 乘以一个极小的权重,然后加到 Total Score 上。

选择权重的原则是:

Anakin Anakin

一站式 AI 应用聚合平台,无代码的AI应用程序构建器

Anakin 290 查看详情 Anakin
  • EScore 的最大可能值乘以其权重,必须小于 Total Score 列中最小的非零差值。
  • DScore 的最大可能值乘以其权重,必须小于 EScore 的最大可能值乘以其权重。

在本例中,Total Score 的最小非零差值是 2 (17-15)。EScore 的最大值是 10。 如果 EScore 权重设为 0.01,则 EScore * 0.01 的最大值为 10 * 0.01 = 0.1。这小于 Total Score 的最小差值 2,因此不会影响 Total Score 间的排名。 DScore 的最大值是 5。 如果 DScore 权重设为 0.0001,则 DScore * 0.0001 的最大值为 5 * 0.0001 = 0.0005。这小于 EScore * 0.01 的最小差值(例如,如果 EScore 差 1,则 0.01),因此不会影响 EScore 间的排名。

# 构建加权综合分数
# EScore权重设为0.01,DScore权重设为0.0001
df['Composite Score'] = df['Total Score'].add(df['EScore'].mul(0.01)).add(df['DScore'].mul(0.0001))

print("\n带有加权综合分数的 DataFrame:")
print(df)

输出:

带有加权综合分数的 DataFrame:
   DScore  EScore  Total Score  Composite Score
0       2       6           17          17.0602
1       2       7           15          15.0702
2       4       9           23          23.0904
3       4       9           23          23.0904
4       5      10           25          25.1005

可以看到,Composite Score 列已经将所有优先级信息编码进去。例如,第2行和第3行的 Total Score 都是 23,EScore 都是 9,DScore 都是 4,所以它们的 Composite Score 完全相同。

3. 应用排名函数

现在,我们可以对 Composite Score 列应用 rank() 函数来生成最终排名。

  • ascending=False:表示分数越高,排名越靠前(即排名值越小)。
  • method='dense':表示在存在相同分数时,它们会获得相同的排名,并且下一个不同的分数会获得紧随其后的排名,不会跳过数字。例如,如果前两名并列第一,下一个将是第二名(1, 1, 2),而不是第三名(1, 1, 3)。
  • .astype('int'):将排名结果转换为整数类型。
df['Rank'] = df['Composite Score'].rank(ascending=False, method='dense').astype('int')

print("\n最终排名结果 DataFrame:")
print(df.drop(columns=['Composite Score'])) # 移除辅助列以展示最终结果

输出:

最终排名结果 DataFrame:
   DScore  EScore  Total Score  Rank
0       2       6           17     3
1       2       7           15     4
2       4       9           23     2
3       4       9           23     2
4       5      10           25     1

可以看到,Total Score 为 25 的获得了第 1 名。Total Score 为 23 的两行都获得了第 2 名。Total Score 为 17 的获得了第 3 名。Total Score 为 15 的获得了第 4 名。这完全符合我们多条件优先级排名的预期。

完整代码示例

import pandas as pd

# 原始数据
df = pd.DataFrame({
    "DScore": [2, 2, 4, 4, 5],
    "EScore": [6, 7, 9, 9, 10],
    "Total Score": [17, 15, 23, 23, 25]
})

print("原始 DataFrame:")
print(df)

# 构建加权综合分数并直接计算排名
# 为EScore和DScore赋予极小的权重,以确保它们只在Total Score相同时代替判别
# 权重选择需确保:
# 1. 次级权重 * 次级分数最大值 < 主级分数最小差异
# 2. 更次级权重 * 更次级分数最大值 < 次级权重 * 次级分数最小差异
df['Rank'] = (
    df['Total Score']
    .add(df['EScore'].mul(0.01))     # EScore作为第一平局打破者,权重0.01
    .add(df['DScore'].mul(0.0001))   # DScore作为第二平局打破者,权重0.0001
    .rank(ascending=False, method='dense') # 降序排名,相同分数使用密集排名
    .astype('int')                   # 转换为整数类型
)

print("\n最终排名结果 DataFrame:")
print(df)

权重选择的考量与注意事项

  1. 权重的相对大小: 选择权重时,最关键的是确保次级排序键的加权值不会影响主排序键的相对顺序。例如,如果 Total Score 的最小差异是 1,那么 EScore 的加权最大值必须远小于 1。如果 EScore 的最大值是 100,权重设为 0.01,那么最大加权值就是 1,这可能会影响 Total Score 的原始顺序。在这种情况下,可能需要选择更小的权重,例如 0.001。
  2. 数据范围: 在实际应用中,需要根据各列数据的实际范围(最小值、最大值)来仔细选择权重。一个好的实践是先计算出各列的数值范围和可能的最小差异,然后据此确定合适的权重。
  3. 浮点数精度: 由于涉及到浮点数运算,在极端情况下可能会遇到浮点数精度问题。但对于大多数排名场景,上述权重选择方法是足够稳健的。
  4. 可读性: 虽然这种方法非常有效,但生成的“加权综合分数”本身可能不具备直观的业务含义。在最终展示时,通常会移除这个辅助列,只保留最终的排名列。

总结

通过构建加权综合分数并结合 Pandas 的 rank() 函数,我们可以高效且灵活地实现基于多列优先级的数据排名。这种方法不仅能够处理简单的单列排名,更能应对复杂的平局打破规则,为数据分析提供了强大的工具。理解权重选择的原则是成功应用此方法的关键,确保排名结果的准确性和业务逻辑的正确性。

以上就是Pandas DataFrame 多条件优先级排序与排名的详细内容,更多请关注其它相关文章!


# 工具  # 数据排序  # 多条  # 设为  # 都是  # 转换为  # 以其  # 获得了  # 降序  # 编码  # 布吉网站建设在哪里  # 网站关键词排名推广公司  # 海南seo排名价格多少  # 商机网站建设渠道包括  # 漳州网站建设开发与制作  # 搜网站建设论文  # 云龙区网站推广联系电话  # 酒泉靠谱的网站推广  # 神木论坛网站建设  # 快手网站推广公司  # 我们可以  # 则是  # 多个 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 怎么恢复删除的电脑文件_数据恢复软件使用教程  如何自定义苹果手机铃声  小米手机截图后如何查看历史_小米手机截图历史记录查看方法  123网页端官方登录页 123邮箱网页版即时通讯服务  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  使用AI在VS Code中将代码从一种语言翻译成另一种  之了课堂app做题入口  冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤  QQ邮箱PC端登录页面_QQ邮箱网页版登录界面  歌词怎么展示在|直播|间视频号?有什么注意事项?  哔哩哔哩黑名单怎么查看  大众点评了却看不到是怎么回事  荣耀 Magic10 Pro 系统更新提示失败_荣耀 Magic10 Pro 升级修复  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  J*aScript桌面应用_Electron多进程架构实战  汽水音乐车机版 汽水音乐车机版官方入口  TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法  《小宇宙》标记不友善评论方法  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  diskgenius分区工具如何设置Bios启动项  VBA Outlook邮件自动化:高效集成Excel数据与列标题的策略  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  漫蛙manwa漫画官网链接_漫蛙manwa最新可用网址推荐  Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】  研招网官方网站正版登录网址_中国研究生招生信息网官网首页  LINUX怎么查看显卡信息_LINUX查看GPU状态  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  荣耀magicv5怎么上手测评  苹果手机聊天记录删除了如何恢复  AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用  汽水音乐官方网站登录入口_汽水音乐网页版进入链接  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  C#解析来自网络的XML流数据 实时错误处理与重试机制  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  管理打开的编辑器:固定、分组和关闭技巧  Composer如何使用composer-plugin-api开发自定义插件  鸣潮历史学家灯塔位置一览  win11怎么设置默认终端为Windows Terminal Win11替代CMD和PowerShell【技巧】  被称为海蜈蚣的海洋动物是  win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】  顺丰速运官网查询入口 顺丰物流查询官网入口链接  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  快手极速版在线体验区 快手极速版网页体验入口  Win10截图远程协助 Win10远程桌面截屏法【场景应用】  鲁班大师乓乓皮肤获取方法  B站怎么快速升级 B站用户等级提升攻略【详解】  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧  顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】 

 2025-12-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.