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

如何获取Pandas DataFrame中最大值的全部行索引?

解决Pandas获取最大值对应全部行索引的问题

嘿,这个问题我之前也踩过坑!argmax()和idxmax()确实只会返回第一个遇到的最大值索引,碰到多个相同最大值的场景就不够用了。不过别担心,有几种简单直接的方法能搞定,我给你分情况说明:

1. 单列场景:获取某列所有最大值对应的索引

假设你有一个DataFrame,想提取某一列中所有等于最大值的行的索引,步骤很清晰:

  • 先算出该列的最大值
  • 用布尔索引筛选出值等于最大值的行
  • 提取这些行的索引(可以转成列表方便使用)

示例代码:

import pandas as pd

# 构造示例数据
df = pd.DataFrame(
    {'score': [85, 92, 92, 78, 92]},
    index=['Alice', 'Bob', 'Charlie', 'David', 'Eve']
)

# 步骤1:获取列的最大值
max_score = df['score'].max()

# 步骤2+3:筛选并提取索引
max_indices = df[df['score'] == max_score].index.tolist()

print(max_indices)  # 输出: ['Bob', 'Charlie', 'Eve']

2. 整个DataFrame场景:获取包含全局最大值的所有行索引

如果要找整个DataFrame中所有包含全局最大值的行的索引,稍微调整一下逻辑:

  • 先算出整个DataFrame的全局最大值
  • 检查每一行是否有元素等于这个最大值(用any(axis=1)判断行内是否满足条件)
  • 提取符合条件的行索引

示例代码:

import pandas as pd

# 构造示例数据
df = pd.DataFrame(
    {'math': [90, 95, 95, 88],
     'english': [88, 92, 95, 91]},
    index=['Sam', 'Tom', 'Lily', 'Lucy']
)

# 步骤1:获取全局最大值
global_max = df.max().max()

# 步骤2+3:筛选并提取索引
all_max_rows = df[df.eq(global_max).any(axis=1)].index.tolist()

print(all_max_rows)  # 输出: ['Tom', 'Lily']

3. 进阶:按列分别获取各列最大值的所有索引

如果需要对每一列单独提取其最大值对应的所有索引,可以用apply结合上面的逻辑:

# 按列生成各列最大值的索引列表
col_max_indices = df.apply(lambda col: col[col == col.max()].index.tolist())

print(col_max_indices)
# 输出:
# math      [Tom, Lily]
# english         [Lily]
# dtype: object

这些方法都很直观,而且能完美覆盖多个最大值的场景,你可以根据自己的需求选对应的方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:02:35