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

Python实现公式计算大数据集DataFrame 按name分组求单个S分数

Python实现公式计算DataFrame分组S分数的解决方案

问题核心错误说明

你之前的实现逻辑和公式要求不符,公式要求的是对每个name分组下的每一行计算type * OR,再对乘积求和,而你的代码是先对分组内的type、OR分别求和再相乘,二者数学逻辑完全不同,小数据集可能巧合结果一致,大数据集自然会出现不符合预期的输出。

正确实现代码

import pandas as pd

def calculate_s_score(df):
    # 逐行计算公式中的Xj * bj(对应type * OR)
    df['row_product'] = df['type'] * df['OR']
    # 按name分组,对乘积列求和得到每个name的唯一S分数
    s_result = df.groupby('name', as_index=False)['row_product'].sum()
    # 重命名结果列
    s_result.rename(columns={'row_product': 'S_score'}, inplace=True)
    return s_result

调用该函数返回的结果就是每个name对应唯一S分数的4行DataFrame,符合你的要求。

关于type列用sum还是count的说明

你提到type是二进制值,按公式给出的Xj对应type列的定义,不需要用count:

  • count是统计每个name对应的行数,和type的实际取值无关
  • 直接用type的原值计算乘积再分组求和即可,如果你的type确实是0/1二进制值,逻辑完全匹配公式要求,示例中出现的type=2属于数据异常,可提前做数据清洗过滤不符合要求的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:39:00