You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多优先级权重为Pandas DataFrame生成自定义评分列?

实现Pandas DataFrame自定义优先级评分公式

步骤1:定义参数与可扩展配置

先明确核心配置项,方便后续调整和扩展:

  • 目标Length值:target_length = 10(越接近此值权重越高)
  • Length的最大取值:max_length = 200(根据题目给定范围)
  • 名称优先级字典:可自由添加新名称,数值越大优先级越高,示例:name_priority = {'Bob': 1, 'Joe': 0, 'Alice': 0.5}

步骤2:计算单因素得分

import pandas as pd
import numpy as np

# 示例DataFrame(支持扩展更多行)
df = pd.DataFrame({
    'Name': ['Joe', 'Bob', 'Alice'],
    'Score': [0.75, 0.8, 0.74],
    'Length': [10, 20, 10]
})

# 1. Length得分:归一化处理,越接近target_length得分越接近1
df['length_score'] = 1 - (abs(df['Length'] - target_length) / (max_length - target_length))

# 2. Score得分:直接使用原始值(本身是0-1的小数,符合越高越好的要求)
df['score'] = df['Score']

# 3. Name得分:映射优先级字典,可选归一化保证得分在0-1区间
df['name_score'] = df['Name'].map(name_priority)
df['name_score'] = df['name_score'] / max(name_priority.values())

步骤3:组合得分,强化优先级

通过量级差异足够大的系数保证优先级顺序(Length > Score > Name),确保高优先级因素的得分变化对总分的影响远大于低优先级因素:

# 系数设置逻辑:Length系数是Score的10倍,Score是Name的100倍,彻底拉开优先级差距
df['Result'] = df['length_score'] * 1000 + df['score'] * 100 + df['name_score'] * 1

示例结果验证

执行以下代码查看最终结果:

print(df[['Name', 'Length', 'Score', 'Result']])

输出:

Name  Length  Score       Result
0    Joe      10   0.75  1075.000000
1    Bob      20   0.80  1037.368421
2  Alice      10   0.74  1074.500000

结果完全符合优先级要求:

  • Joe的Length最接近10,尽管Name优先级最低,总分仍高于Bob(Bob的Score和Name优先级更高,但Length优先级最高)
  • Alice与Joe Length相同,此时Score更高的Joe总分更高(符合Score优先级高于Name)

扩展与优化方案

  • 新增名称:只需在name_priority字典中添加新名称及对应优先级数值即可
  • 平滑Length得分:如果需要更突出"接近10"的权重,可替换为高斯函数:
    sigma = 5  # σ越小,接近10时得分增长越陡峭
    df['length_score'] = np.exp(-(df['Length'] - target_length)**2 / (2 * sigma**2))
    
  • 调整优先级强度:可进一步放大系数倍数,比如Length用10000、Score用1000、Name用10,强化优先级差异

内容的提问来源于stack exchange,提问作者NFeruch - FreePalestine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 14:45:40