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

如何在Pandas中创建列存储排除值1后的最大数值对应列名?

获取数据集中最大非1值的列名

问题分析

你需要为每行创建新列,取值为该行中数值最大且不等于1的列名。原代码存在语法错误(缺少else分支)、参数错误(max的参数应为axis=1而非index=1),且未处理“最大值等于1”时的逻辑——此时需要排除所有值为1的列,再从剩余列中找最大值对应的列名。

解决方案

以下两种方法均可实现需求:

方法1:替换1为缺失值后取idxmax

将所有值为1的单元格替换为pd.NA,这样idxmax会自动忽略这些缺失值,直接返回剩余值中最大值的列名:

import pandas as pd

df = pd.DataFrame({'A': [1, 0.2, 0.1, 0],
                   'B': [0.2, 1, 0, 0.5],
                   'C': [1, 0.4, 0.3, 1]},
                  index=['1', '2', '3', '4'])

# 创建新列
df['NEWCOL'] = df.replace(1, pd.NA).idxmax(axis=1)

方法2:逐行自定义筛选逻辑

使用apply遍历每行,先筛选出值不等于1的列,再取最大值对应的列名,适合需要更复杂筛选条件的场景:

def get_target_col(row):
    # 筛选出当前行值不等于1的列
    non_one_cols = row[row != 1]
    # 返回最大值对应的列名
    return non_one_cols.idxmax()

df['NEWCOL'] = df.apply(get_target_col, axis=1)

结果验证

执行上述代码后,数据集输出如下:

indexABCNEWCOL
11.00.21.0B
20.21.00.4C
30.10.00.3C
40.00.51.0B

注:你提供的期望输出中第3行的B值为0.4,与原始数据集的B值0.0不符,上述结果是基于你给出的原始数据集生成的正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:55:20