关于Pandas版本: 本文基于 pandas2.2.0 编写。
关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。
传送门: Pandas API参考目录
传送门: Pandas 版本更新及新特性
传送门: Pandas 由浅入深系列教程
DataFrame.idxmax
用于返回沿着指定轴的最大值第一次出现位置的索引。
DataFrame.idxmax(axis=0, skipna=True, numeric_only=False)
Series
该方法的返回值是一个 Series
,包含沿着指定轴的最大值位置的索引
?? 注意 :
- 当
axis=0
即查找每列的最大值位置时,Series的索引 表示的是DataFrame
列名,值 表示的是这一列的最大值在DataFrame
里对应的 行索引。- 当
axis=1
即查找每行的最大值位置时,Series的索引 表示的是DataFrame
行索引,值 表示的是这一行的最大值在DataFrame
里对应的 列名。
axis:{0 or ‘index’, 1 or ‘columns’}, default 0 例1
axis
参数用于控制查找方向:
skipna:bool, default True
skipna
参数用于控制是否排除缺失值,默认 skipna=Ture
表示排除缺失值:
?? 注意 :
不建议设置为
skipna=False
。因为当skipna=False
,一但出现缺失值结果将只返回nan。 例2-3
numeric_only:bool, default False 例3
numeric_only
参数用于控制是否只在纯数值型的行或列中查找最大值的位置,默认 numeric_only=False
。
?? 注意 :
数值型包含
浮点数 float
,整数 int
,布尔型 boolean
如果没有可供计算的行或列,结果将是一个空的
Series
?? 相关方法
最大值索引
测试文件下载:
本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。
若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。
import pandas as pd
df = pd.DataFrame(
{"第1列": [10.51, 103.11, 55.48], "第2列": [37.2, 19.66, 1712]},
index=["第一行", "第二行", "第三行"],
)
df
第1列 | 第2列 | |
---|---|---|
第一行 | 10.51 | 37.20 |
第二行 | 103.11 | 19.66 |
第三行 | 55.48 | 1712.00 |
df.idxmax()
第1列 第二行
第2列 第三行
dtype: object
df.idxmax(axis=1)
第一行 第2列
第二行 第1列
第三行 第2列
dtype: object
import pandas as pd
import numpy as np
df = pd.DataFrame(
{"第1列": [np.NaN, 103.11, 55.48], "第2列": [37.2, np.NaN, 1712]},
index=["第一行", "第二行", "第三行"],
)
df
第1列 | 第2列 | |
---|---|---|
第一行 | NaN | 37.2 |
第二行 | 103.11 | NaN |
第三行 | 55.48 | 1712.0 |
df.idxmax()
第1列 第二行
第2列 第三行
dtype: object
df.idxmax(skipna=False)
C:\Users\Administrator\AppData\Local\Temp\ipykernel_607864\35380768.py:1: FutureWarning: The behavior of DataFrame.idxmax with all-NA values, or any-NA and skipna=False, is deprecated. In a future version this will raise ValueError
df.idxmax(skipna=False)
第1列 NaN
第2列 NaN
dtype: object
numeric_only=True
将排除不是纯数值型的行或列import pandas as pd
import numpy as np
df = pd.DataFrame(
{"第1列": [np.NaN, 103.11, 2], "第2列": ['地雷', np.NaN, 1712]},
index=["第一行", "第二行", "第三行"],
)
df
第1列 | 第2列 | |
---|---|---|
第一行 | NaN | 地雷 |
第二行 | 103.11 | NaN |
第三行 | 2.00 | 1712 |
df.idxmax(numeric_only=True)
第1列 第二行
dtype: object
示例3-3、如果没有可供计算的行或列,结果将是一个空的 Series
import pandas as pd
import numpy as np
df = pd.DataFrame(
{"第1列": [np.NaN, 103.11, '测试'], "第2列": ['地雷', np.NaN, 1712]},
index=["第一行", "第二行", "第三行"],
)
df.idxmax(numeric_only=True)
Series([], dtype: object)