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

如何在Python DataFrame中提取每行含最大值的多列列名?

提取每行中含最大值的所有列名

你可以通过以下两种方法实现需求:

方法一:逐行筛选(简洁直观)

直接对数值列使用apply,结合布尔索引提取所有等于该行最大值的列名:

import pandas as pd
data = [['rama', 10, 20, 20,12], ['radha', 15, 18, 12, 18], ['sai', 14, 12, 10, 11]] 
ex_df = pd.DataFrame(data, columns=['name','sub1','sub2','sub3','sub4'])

# 定义数值列范围(排除name列)
numeric_cols = ex_df.columns[1:]
# 生成每行最大值对应的列名列表
ex_df['max_columns'] = ex_df[numeric_cols].apply(
    lambda row: row[row == row.max()].index.tolist(),
    axis=1
)

# 查看结果
print(ex_df[['name', 'max_columns']])

输出结果:

name  max_columns
0   rama  [sub2, sub3]
1  radha  [sub2, sub4]
2    sai        [sub1]

方法二:矢量化处理(高效适用于大数据集)

先计算每行最大值,再生成布尔掩码筛选列名,避免逐行循环的性能损耗:

import pandas as pd
data = [['rama', 10, 20, 20,12], ['radha', 15, 18, 12, 18], ['sai', 14, 12, 10, 11]] 
ex_df = pd.DataFrame(data, columns=['name','sub1','sub2','sub3','sub4'])

numeric_cols = ex_df.columns[1:]
# 计算每行的最大值
row_max_values = ex_df[numeric_cols].max(axis=1)
# 生成布尔矩阵:标记每个元素是否等于对应行的最大值
max_mask = ex_df[numeric_cols].eq(row_max_values, axis=0)
# 提取每行中标记为True的列名,转为列表
ex_df['max_columns'] = max_mask.apply(lambda x: x[x].index.tolist(), axis=1)

print(ex_df['max_columns'])

核心逻辑说明

两种方法的核心都是:

  1. 定位数值列,排除非数值列(比如你的name列)
  2. 找到每行的最大值
  3. 筛选出该行中值等于最大值的所有列,提取它们的列名并转为列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:00:13