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

如何基于分组列将多组预测值转换为组内最大值为1其余为0的格式

实现方案

方法1:使用Pandas实现(最便捷,适合数据量较大的场景)

你可以直接利用Pandas的分组转换能力实现需求,代码示例如下:

import pandas as pd

# 输入数据
id_test = [3, 3, 3, 3, 4, 4, 4, 4]
y_hat = [0.65, 0.33, 0.13, 0.00, 0.33, 0.34, 0.21, 0.08]

# 构造DataFrame
df = pd.DataFrame({"id": id_test, "y_hat": y_hat})

# 按id分组后,判断每行y_hat是否为分组内最大值,转浮点得到结果
df["y_hat_transform"] = (df["y_hat"] == df.groupby("id")["y_hat"].transform("max")).astype(float)

# 提取结果数组
y_hat_transform = df["y_hat_transform"].tolist()

运行后得到的y_hat_transform就是你需要的[1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0]。
如果分组内存在多个相同的最大值,默认所有最大值行都会被标记为1.0,如果你只需要标记第一个最大值,可以把判断逻辑替换为:

df["y_hat_transform"] = (df.groupby("id")["y_hat"].rank(method="first", ascending=False) == 1).astype(float)

方法2:纯Python实现(无第三方依赖)

如果不想引入Pandas,可以用字典先统计每个分组的最大值,再遍历生成结果:

id_test = [3, 3, 3, 3, 4, 4, 4, 4]
y_hat = [0.65, 0.33, 0.13, 0.00, 0.33, 0.34, 0.21, 0.08]

# 第一步:统计每个id对应的最大y_hat值
group_max = {}
for id_val, y in zip(id_test, y_hat):
    if id_val not in group_max or y > group_max[id_val]:
        group_max[id_val] = y

# 第二步:逐行判断生成转换结果
y_hat_transform = []
for id_val, y in zip(id_test, y_hat):
    y_hat_transform.append(1.0 if y == group_max[id_val] else 0.0)

该方法不限制分组大小,适配任意长度的输入数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:51:02