Pandas计算列众数出现并列时如何按自定义权重选取返回值
解决方法
核心逻辑是先筛选出所有出现频次等于最高频次的众数候选,再根据自定义的优先级分数字典取分数最高的候选即可,完整实现如下:
代码示例
import pandas as pd # 你的优先级分数字典 score_by_priority_category = { 'Critical': 1, 'High': 0.6, 'Medium': 0.4, 'Low': 0.2 } # 1. 统计各优先级出现频次 vc = df['Priority'].value_counts() # 2. 获取最高出现频次 max_freq = vc.max() # 3. 筛选所有符合众数定义的候选值 mode_candidates = vc[vc == max_freq].index # 4. 按自定义分数规则取分数最高的候选作为最终众数 custom_mode = max(mode_candidates, key=lambda x: score_by_priority_category[x]) print(custom_mode) # 输出结果为 Medium
补充说明
- 原方法调用
df['Priority'].mode()返回Low是因为pandas默认对并列众数按字母序排序返回,以上方案直接基于频次统计结果处理,完全绕开默认排序规则,匹配业务需求。 - 后续如果优先级分数规则调整,仅需修改
score_by_priority_category字典即可,不需要改动逻辑代码。
内容的提问来源于stack exchange,提问作者Him Singhvi
相关产品推荐
相关产品推荐

