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

基于Python实现类别权重动态分配(缺失类别场景)

当然有通用的实现方法!这种动态权重分配的需求在处理缺失类别数据时很常见,下面我会用Python + Pandas来演示一个简洁且可扩展的方案(虽然你只提到三类,但这个思路可以轻松扩展到更多类别):

核心思路
  • 先定义好原始的预定义权重映射
  • 对每一行数据,识别出非缺失的类别(即d1、d2、d3中不为空的列)
  • 计算所有缺失类别对应的权重总和,将这个总和平均分配给每个非缺失类别,得到新的权重
  • 用新权重和对应非缺失的d值计算加权得分
具体实现代码

假设你的DataFrame命名为df,包含d1、d2、d3列,我们可以用apply函数逐行处理:

import pandas as pd
import numpy as np

# 1. 定义原始预定义权重
original_weights = {'d1': 0.5, 'd2': 0.3, 'd3': 0.2}

def calculate_dynamic_score(row):
    # 获取当前行的d值,过滤出非缺失的项
    non_missing = row[['d1', 'd2', 'd3']].dropna()
    non_missing_cols = non_missing.index.tolist()
    
    # 处理全缺失的极端情况(如果业务允许,这里可返回NaN或自定义默认值)
    if len(non_missing_cols) == 0:
        return np.nan
    
    # 2. 计算缺失类别的总权重
    missing_weight = sum([original_weights[col] for col in original_weights if col not in non_missing_cols])
    
    # 3. 计算每个非缺失类别的新权重:原始权重 + 缺失权重均分
    weight_per_non_missing = missing_weight / len(non_missing_cols)
    new_weights = {col: original_weights[col] + weight_per_non_missing for col in non_missing_cols}
    
    # 4. 计算加权得分
    score = sum(non_missing[col] * new_weights[col] for col in non_missing_cols)
    return score

# 应用到DataFrame,生成SCORE列
df['SCORE'] = df.apply(calculate_dynamic_score, axis=1)
验证场景示例

举几个典型场景验证逻辑:

  • 三类数据都存在:新权重与原始权重完全一致,得分 = d1*0.5 + d2*0.3 + d3*0.2
  • d3缺失:缺失权重为0.2,平均分给d1和d2各0.1 → 新权重为{'d1':0.6, 'd2':0.4},得分 = d1*0.6 + d2*0.4
  • 仅d1存在:缺失权重为0.3+0.2=0.5,全部分给d1 → 新权重为{'d1':1.0},得分 = d1*1.0
扩展说明

如果后续需要增加更多类别(比如C4、C5),只需修改original_weights字典即可,核心逻辑完全不需要改动,通用性拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:39:38