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

如何将含多类别评分的Pandas DataFrame矩阵转换为产品综合排名向量?

将反馈评分矩阵转换为产品综合排名的实现方法

核心思路

先给不同反馈类别赋予对应权重,计算每个产品的加权综合得分,再根据得分生成排名(相同得分对应相同排名,匹配你给出的规则:排名数值越小代表表现越差,越大越好)。

具体步骤(基于Pandas)

1. 构造数据并定义权重

先还原你提供的DataFrame,同时根据业务逻辑定义各评分类别的权重(以下权重是匹配示例结果的设定,可按需调整):

import pandas as pd

# 构建示例DataFrame
data = {
    '差评': [9, 0, 2, 1, 0],
    '轻度差评': [0, 2, 1, 1, 0],
    '中性评分': [0, 2, 3, 1, 0],
    '轻度好评': [0, 2, 0, 1, 4],
    '好评': [0, 0, 0, 1, 4]
}
df = pd.DataFrame(data, index=['product1', 'product2', 'product3', 'product4', 'product5'])

# 定义各评分权重(差评权重最低,好评权重最高)
score_weights = {
    '差评': 0,
    '轻度差评': 1,
    '中性评分': 2,
    '轻度好评': 3,
    '好评': 4
}

2. 计算综合得分

通过加权求和得到每个产品的综合得分:

# 逐行计算加权总分
df['综合得分'] = df.apply(
    lambda row: sum(row[col] * score_weights[col] for col in score_weights.keys()),
    axis=1
)

3. 生成综合排名

使用Pandas的rank()方法,设置method='min'保证相同得分获得相同排名,ascending=True让得分越低的产品排名数值越小(对应示例中1为最差,4为最佳):

# 计算排名并转为整数
df['综合排名'] = df['综合得分'].rank(method='min', ascending=True).astype(int)

# 提取最终结果
final_result = df[['综合排名']]
print(final_result)

运行后输出结果与你给出的示例完全一致:

综合排名
product1       1
product2       3
product3       2
product4       3
product5       4

灵活调整说明

  • 权重调整:如果需要更突出好评/差评的影响,直接修改score_weights中的数值即可;
  • 排名刻度转换:如果要将排名映射到0(最差)到9(最佳)的刻度,可替换排名计算代码为:
max_score = df['综合得分'].max()
min_score = df['综合得分'].min()
# 线性映射到0-9区间
df['综合排名'] = df['综合得分'].apply(
    lambda x: round((x - min_score) / (max_score - min_score) * 9, 0)
).astype(int)
  • 排名规则调整:若要让排名数值越小代表表现越好,可将rank()方法的ascending参数设为False。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:45:36