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

如何查找pandas DataFrame全表全局最大最小值及对应位置而非行列级最值

你可以通过pandas和numpy的内置向量化方法实现需求,无需自行遍历行列,性能更优。另外你之前写的按行获取最值的参数有误,正确参数为axis=1,正确写法是df.max(axis=1)。


场景1:需要最值对应的行标签、列名

可以通过stack()将DataFrame转为多级索引的Series,再用idxmax()/idxmin()直接获取最值位置:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    '语文': [89, 92, 78],
    '数学': [95, 88, 96],
    '英语': [90, 93, 87]
})

# 全局最大值及对应位置
global_max = df.stack().max()
max_pos = df.stack().idxmax()
print(f"全局最大值:{global_max},位置(行索引,列名):{max_pos}")

# 全局最小值及对应位置
global_min = df.stack().min()
min_pos = df.stack().idxmin()
print(f"全局最小值:{global_min},位置(行索引,列名):{min_pos}")

输出示例:

全局最大值:96,位置(行索引,列名):(2, '数学')
全局最小值:78,位置(行索引,列名):(2, '语文')

场景2:需要最值对应的整数行号、列号(从0计数)

可以结合numpy的unravel_index方法直接解析最值的坐标:

import numpy as np

# 全局最大值整数位置
max_row, max_col = np.unravel_index(df.values.argmax(), df.shape)
global_max = df.iloc[max_row, max_col]
print(f"全局最大值:{global_max},整数位置(行号,列号):{(max_row, max_col)}")

# 全局最小值整数位置
min_row, min_col = np.unravel_index(df.values.argmin(), df.shape)
global_min = df.iloc[min_row, min_col]
print(f"全局最小值:{global_min},整数位置(行号,列号):{(min_row, min_col)}")

拓展:查找所有重复最值的位置

如果数据中存在多个相同的最值,需要返回所有位置,可以用布尔索引实现:

# 查找所有全局最大值的位置
all_max_pos = df[df == global_max].stack().index.tolist()
print("所有全局最大值的位置:", all_max_pos)

以上方法均为原生向量化操作,无需自行遍历行列,性能远高于循环实现,符合pandas的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:36:02