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

基于Pandas多列生成标准化总分:无临时列与权重均衡方案咨询

解决方案

1. 无需创建临时列的实现方式

直接在赋值环节完成映射与求和,不需要单独生成range_score临时列,两种简洁写法如下:

  • 直接赋值法:
import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'level_count': [1,2,3,1],
    'range_bins': ['low', 'medium', 'high', 'very_high']
})

# 直接映射range_bins并与level_count求和生成total_score
df['total_score'] = df['level_count'] + df['range_bins'].map({
    'low': 1,
    'medium': 2,
    'high': 3,
    'very_high': 4
})
  • 链式assign法(适合保持原DataFrame不变或链式操作场景):
df = df.assign(
    total_score=lambda x: x['level_count'] + x['range_bins'].map({
        'low': 1,
        'medium': 2,
        'high': 3,
        'very_high': 4
    })
)

2. 标准化实现等权重(含后续扩展方案)

要让取值范围不同的列权重相同,核心是将每列数值缩放到相同区间,确保单列对总分的贡献上限一致。针对你的需求,推荐用最小-最大标准化(Min-Max Scaling),同时预留后续新增列的扩展能力:

步骤说明:

  1. 将range_bins映射为数值(1-4)
  2. 对每列做Min-Max缩放,将值缩至[0,1]区间
  3. 按列数平均分配权重(当前两列各占50%,后续新增列时自动调整权重占比)

代码实现:

# 定义Min-Max标准化函数
def scale_column(col):
    return (col - col.min()) / (col.max() - col.min())

# 映射range_bins为数值
df['range_numeric'] = df['range_bins'].map({
    'low':1, 'medium':2, 'high':3, 'very_high':4
})

# 指定需要参与计算的列(后续新增列直接加入此列表)
target_cols = ['level_count', 'range_numeric']
# 生成标准化后的列名
scaled_cols = [f'{col}_scaled' for col in target_cols]

# 对目标列做标准化
df[scaled_cols] = df[target_cols].apply(scale_column)

# 按列数平均权重,保证所有列贡献同等重要
df['total_score'] = df[scaled_cols].mean(axis=1)

# 若需要将总分缩放到0-10等区间,可追加:
# df['total_score'] = df['total_score'] * 10

扩展适配:

后续新增类似列时,只需将新列名加入target_cols列表,代码会自动完成标准化并平均权重,确保所有列对总分的影响程度一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:15:43