如何获取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
相关产品推荐
相关产品推荐

