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
相关产品推荐
相关产品推荐

