pandas idxmax 返回具有最大值的所有列

Ani*_*hra 2 python max dataframe pandas

我有一个数据框,如下所示:

column_1    column_2
2           3
6           4
5           5
.
.
.
Run Code Online (Sandbox Code Playgroud)

我想为上述数据帧的每一行返回该行中具有最大值的列的名称;例如,对于第一行,我想返回“column_2”,对于第三行,它将返回两个列名称,因为它们具有相同的值。

我尝试使用 Pandas 的 idxmax 函数来实现它;但这个函数只返回第一个出现的情况,而忽略其余的可能性;就像上面第三行的示例一样,idxmax 仅返回 'column_1' 而不是 ['column_1', 'column_2']。

任何想法如何解决这个问题。在此先感谢您的帮助。

Mus*_*dın 6

对于每一行,您可以检查条目是否等于该行的最大值;这将形成一个布尔框架。然后,您可以dot将其与列名称相乘,以选择True为行提供的列名称:

is_max = df.eq(df.max(axis=1), axis=0)
result = is_max.dot(df.columns + " ")
Run Code Online (Sandbox Code Playgroud)

其中axis=1ofmax表示取每行的最大值,axis=0ofeq表示对齐参数(即,df.max(axis=1))以逐行比较,即广播如此),

要得到

>>> is_max

   column_1  column_2
0     False      True
1      True     False
2      True      True

>>> result

0             column_2
1             column_1
2    column_1 column_2
Run Code Online (Sandbox Code Playgroud)