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

如何在Pandas中将每行最大值设为1、其余设为0?

实现DataFrame每行最大值列二值化(多列同最大值时仅保留最左侧为1)

嘿,这个需求用pandas就能轻松搞定,完全契合你补充的规则,我给你一步步讲清楚怎么实现:

1. 先把原始数据转换成DataFrame

首先把你给出的原始数据构建成pandas的DataFrame:

import pandas as pd

# 原始数据
data = {
    'A': [0.10, 0.40, 0.70, 0.72, 0.15],
    'B': [0.83, 0.30, 0.17, 0.04, 0.07],
    'C': [0.07, 0.30, 0.13, 0.24, 0.78]
}
df = pd.DataFrame(data)

这时候你的原始DataFrame就是:

A     B     C
0  0.10  0.83  0.07
1  0.40  0.30  0.30
2  0.70  0.17  0.13
3  0.72  0.04  0.24
4  0.15  0.07  0.78

2. 核心处理代码

这里用到两个关键的pandas方法,刚好解决你的问题:

  • df.idxmax(axis=1):获取每行最大值对应的列名,当一行有多个列数值相等且都是最大值时,它会默认取最左侧的列,完美匹配你补充的规则
  • pd.get_dummies():把列名转换为二值化的矩阵,再用reindex对齐原始列的顺序,避免列顺序混乱

代码如下:

# 获取每行最大值对应的列名(自动取最左侧的最大值列)
max_column_per_row = df.idxmax(axis=1)
# 转换为二值化DataFrame,对齐原始列顺序
binary_result = pd.get_dummies(max_column_per_row).reindex(columns=df.columns, fill_value=0)

3. 查看最终结果

打印binary_result就能得到你想要的输出:

A  B  C
0  0  1  0
1  1  0  0
2  1  0  0
3  1  0  0
4  0  0  1

验证特殊情况

比如假设某行数据是[0.5, 0.5, 0.2],idxmax(axis=1)会返回'A'(最左侧的最大值列),转换后的二值化结果就是[1, 0, 0],完全符合你要求的格式,不会出现多个1的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:52:21