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

如何将DataFrame每行最大值列设为1、其余列设为0?(5000行数据)

解决方案:DataFrame每行最大值列置1,其余列置0

完全不需要用if语句,pandas的向量化操作是最优方案——既简洁又高效,尤其适合你5000行的数据集。

最优实现代码

import pandas as pd

# 假设你的DataFrame名为df,替换为实际数据
result = df.eq(df.max(axis=1), axis=0).astype(int)

代码解释

  1. df.max(axis=1):计算每行的最大值,返回一个与原DataFrame索引一致的Series
  2. df.eq(..., axis=0):将原DataFrame的每个元素和对应行的最大值比较,生成布尔矩阵(最大值位置为True,其余为False)
  3. .astype(int):把布尔值转换为整数(True→1,False→0)

备选分步实现(适合理解逻辑)

如果需要更直观的分步操作,也可以这样写:

# 获取每行最大值对应的列名
max_cols = df.idxmax(axis=1)

# 创建全0的结果DataFrame,结构与原数据一致
result = pd.DataFrame(0, index=df.index, columns=df.columns)

# 给每行最大值所在列赋值1
for idx, col in max_cols.items():
    result.loc[idx, col] = 1

为什么不用if语句?

用if循环遍历每行处理属于Python层面的循环,效率远低于pandas内部优化的向量化操作——即使是5000行,向量化方法的执行速度也会快几倍,同时代码可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:54:20