对pandas DataFrame按Manufacture_Id分组应用softmax并新增Score2列
实现方案
你需要按Manufacture_Id字段分组后对每组的Score单独应用softmax,直接用pandas的groupby + transform组合就能实现,计算结果会自动和原表行顺序对齐,直接作为新列赋值即可。
import pandas as pd from scipy.special import softmax # 修正样例数据最后一行的id错误(原笔误写为id_2,对应实际应为id_3) data = [ ["id_1",93,1], ["id_1",91,2], ["id_1",86,3], ["id_2",88,1], ["id_2",73,2], ["id_2",72,3], ["id_3",34,1], ["id_3",24,2], ] test = pd.DataFrame(data, columns = ['Manufacture_Id', 'Score', 'Rank']) # 核心逻辑:分组应用softmax,不需要保留小数可以去掉.round(2) test['Score2'] = test.groupby('Manufacture_Id')['Score'].transform(softmax).round(2) # 验证每组Score2求和为1 print(test.groupby('Manufacture_Id')['Score2'].sum()) # 打印最终结果 print(test)
运行后输出的结果和你提供的预期输出一致,每个Manufacture_Id分组下的Score2总和为1,符合概率分布要求。
内容的提问来源于stack exchange,提问作者Deb
相关产品推荐
相关产品推荐

