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

如何获取Pandas DataFrame每行最大值的所有列索引?

获取Pandas DataFrame每行所有最大值的列索引

没问题,我刚好处理过类似的需求!idxmax()确实只会返回每行最大值的首次出现位置,要拿到所有对应最大值的列索引,这里有两种实用的方法,分别适合不同规模的数据集:

先构造示例DataFrame

先拿一个包含多行多最大值的示例数据来演示:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [3, 5, 2],
    'B': [5, 5, 2],
    'C': [3, 3, 2]
})

方法1:用apply逐行处理(代码简洁,适合小数据)

这种写法直观易懂,用apply遍历每行,先找到该行的最大值,再筛选出所有等于最大值的列,最后提取索引转成列表:

max_col_indices = df.apply(lambda row: row[row == row.max()].index.tolist(), axis=1)

运行后得到的结果是一个Series,每行对应该行所有最大值的列名列表:

0    [A, B]
1       [A, B]
2    [A, B, C]
dtype: object

方法2:用numpy实现(效率更高,适合大数据集)

如果你的DataFrame行数很多,apply的循环效率会比较低,这时候用numpy的向量化操作会快很多:

# 先获取每行的最大值,转成二维数组以便和原数据逐元素比较
row_max_vals = df.max(axis=1).values[:, np.newaxis]
# 生成布尔矩阵,标记每个位置是否等于该行最大值
is_max = df.values == row_max_vals
# 遍历每个布尔掩码,提取对应的列名
max_col_indices = pd.Series(
    [df.columns[mask].tolist() for mask in is_max],
    index=df.index
)

额外需求:获取整数位置索引

如果你需要的是列的整数位置(而不是列名),只需要把df.columns换成np.arange(df.shape[1])即可:

max_pos_indices = pd.Series(
    [np.where(mask)[0].tolist() for mask in is_max],
    index=df.index
)

结果会是类似[0,1]、[0,1]、[0,1,2]这样的整数索引列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:41:57