先说结论。直接用pandas中的idxmax 方法。
方法介绍:
idxmax
方法用于返回某个轴上最大值的索引标签。其常用的参数包括:
axis
: 默认为0,表示按列查找最大值的索引。如果设置为1,则按行查找最大值的索引。skipna
: 默认为True,表示跳过NaN值。如果设置为False,则NaN值也会参与计算。
示例
我们以一个简单的例子来演示如何使用idxmax
方法。
假设我们有以下一个包含随机数据的DataFrame:
import pandas as pd
import numpy as np
# 创建一个示例DataFrame
data = {
'A': [1, 2, 3, np.nan, 5],
'B': [5, 3, 1, 2, 4],
'C': [2, 4, np.nan, 3, 1]
}
df = pd.DataFrame(data)
print("原始DataFrame:\n", df)
这个DataFrame如下所示:
A B C
0 1 5 2.0
1 2 3 4.0
2 3 1 NaN
3 NaN 2 3.0
4 5 4 1.0
查找每列最大值所在的行
要查找每列最大值所在的行索引,我们可以使用idxmax
方法,默认情况下axis=0
:
# 查找每列最大值所在的行索引
max_row_indices = df.idxmax(axis=0)
print("每列最大值所在的行索引:\n", max_row_indices)
输出结果为:
每列最大值所在的行索引:
A 4
B 0
C 1
dtype: int64
这表明列'A'的最大值在第4行,列'B'的最大值在第0行,列'C'的最大值在第1行。
查找每行最大值所在的列
要查找每行最大值所在的列索引,我们需要将axis
参数设置为1:
# 查找每行最大值所在的列索引
max_col_indices = df.idxmax(axis=1)
print("每行最大值所在的列索引:\n", max_col_indices)
输出结果为:
每行最大值所在的列索引:
0 B
1 C
2 A
3 C
4 A
dtype: object
这表明第0行的最大值在列'B',第1行的最大值在列'C',第2行的最大值在列'A',依此类推。
跳过NaN值
默认情况下,idxmax
会跳过NaN值。如果希望包含NaN值,可以将skipna
参数设置为False:
# 查找每列最大值所在的行索引,包括NaN值
max_row_indices_with_nan = df.idxmax(axis=0, skipna=False)
print("每列最大值所在的行索引(包含NaN):\n", max_row_indices_with_nan)