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

如何基于DataFrame对比多列数值并实现自定义评分逻辑?

基于多列数值对比生成评分的解决方案

我来帮你搞定这个多维度对比评分的需求!结合你给出的DataFrame结构、高低优劣势列的定义,还有已有的compare_higher函数,我们可以一步步实现评分计算,下面是具体的思路和代码实现:

步骤1:明确核心逻辑

首先得理清几个关键点:

  • 每个指标列(Salary/Age/Cars)需要和对应的平均值列(Avg Salary/Avg Age/Avg Cars)做对比
  • 对于higher_better列表里的列,直接用你定义的compare_higher函数:数值高于平均值得1,等于得0,低于得-1
  • 对于lower_better列表里的列,逻辑要反转:数值低于平均值得1,等于得0,高于得-1——这其实等价于调用compare_higher(平均值, 当前值)

步骤2:代码实现

先准备基础数据和函数

import pandas as pd

# 构造你的示例DataFrame
df = pd.DataFrame({
    'Name': ['John', 'Tom'],
    'Salary': [50000, 65000],
    'Age': [35, 45],
    'Cars': [1, 3],
    'Avg Salary': [60000, 60000],
    'Avg Age': [38, 38],
    'Avg Cars': [1, 1]
})

# 定义高低优劣势列
higher_better = ['Salary', 'Cars']
lower_better = ['Age']

# 你已定义的对比函数
def compare_higher(a, b): 
    return 1 if a > b else 0 if a == b else -1

建立列映射关系

为了避免硬编码出错,我们先建立指标列和对应平均值列的映射:

col_mapping = {
    'Salary': 'Avg Salary',
    'Age': 'Avg Age',
    'Cars': 'Avg Cars'
}

封装评分计算函数

写一个通用函数来处理单个指标的评分:

def calculate_score(row, col, is_higher_better):
    # 获取当前行的指标值和对应平均值
    val = row[col]
    avg_val = row[col_mapping[col]]
    
    if is_higher_better:
        # 越高越好,直接用compare_higher
        return compare_higher(val, avg_val)
    else:
        # 越低越好,反转对比逻辑
        return compare_higher(avg_val, val)

生成各指标评分与总评分

遍历所有指标列,生成每个维度的评分,最后计算综合总评分:

# 为越高越好的列生成评分
for col in higher_better:
    df[f'{col}_Score'] = df.apply(lambda row: calculate_score(row, col, is_higher_better=True), axis=1)

# 为越低越好的列生成评分
for col in lower_better:
    df[f'{col}_Score'] = df.apply(lambda row: calculate_score(row, col, is_higher_better=False), axis=1)

# 计算总评分(所有维度评分之和)
df['Total_Score'] = df[[f'{col}_Score' for col in higher_better + lower_better]].sum(axis=1)

步骤3:查看结果

运行完上面的代码后,你的DataFrame会新增各指标的评分列和总评分列,打印df会得到:

Name  Salary  Age  Cars  Avg Salary  Avg Age  Avg Cars  Salary_Score  Cars_Score  Age_Score  Total_Score
0  John   50000   35     1       60000       38         1            -1           0          1            0
1   Tom   65000   45     3       60000       38         1             1           1         -1            1

扩展说明

  • 如果后续新增指标,只需要把指标名添加到higher_better或lower_better列表,同时在col_mapping里补充对应的平均值列即可,扩展性很强
  • 如果你不需要单独的指标评分列,也可以直接计算总评分,不过保留单独列更便于排查每个维度的表现

内容的提问来源于stack exchange,提问作者Karma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:09:52