查找每行具有第二个最大值的列名(pandas)

Ste*_*ios 4 python dataframe pandas

根据这篇文章:Find the column name which has the max value for every row,很清楚如何使用 获取具有每行最大值的列名称df.idxmax(axis=1)

问题是,如何获得每行的第二个、第三个等等最大值?

jez*_*ael 5

您需要numpy.argsort位置,然后通过以下方式重新排序列名称indexing

np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(5,5)), columns=list('ABCDE'))
print (df)
   A  B  C  D  E
0  8  8  3  7  7
1  0  4  2  5  2
2  2  2  1  0  8
3  4  0  9  6  2
4  4  1  5  3  4

arr = np.argsort(-df.values, axis=1)
df1 = pd.DataFrame(df.columns[arr], index=df.index)
print (df1)
   0  1  2  3  4
0  A  B  D  E  C
1  D  B  C  E  A
2  E  A  B  C  D
3  C  D  A  E  B
4  C  A  E  D  B
Run Code Online (Sandbox Code Playgroud)

核实:

#first column
print (df.idxmax(axis=1))
0    A
1    D
2    E
3    C
4    C
dtype: object

#last column
print (df.idxmin(axis=1))
0    C
1    A
2    D
3    B
4    B
dtype: object
Run Code Online (Sandbox Code Playgroud)