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

