pandas idxmax return 所有具有最大值的列
pandas idxmax return all columns with maximum value
我有一个如下所示的数据框:
column_1 column_2
2 3
6 4
5 5
.
.
.
我想 return 对于上述数据框的每一行,在该行中具有最大值的列的名称;例如,对于第一行,我想要 return 'column_2',对于第三行,它将 return 两个列名,因为它们具有相同的值。
我试过用Pandas的idxmax函数来实现;但是这个函数 return 只是第一次出现并且忽略了其余的可能性;就像上面第三行的例子,idxmax returns only 'column_1' 而不是 ['column_1', 'column_2'].
知道如何解决这个问题。预先感谢您的帮助。
对于每一行,您可以检查条目是否等于该行的最大值;这将形成一个布尔框架。然后,您可以 dot
使用列名对其进行乘积,以选择那些为行提供 True
的列名:
is_max = df.eq(df.max(axis=1), axis=0)
result = is_max.dot(df.columns + " ")
其中 max
的 axis=1
表示取每行的最大值,eq
的 axis=0
表示将参数(即 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
我有一个如下所示的数据框:
column_1 column_2
2 3
6 4
5 5
.
.
.
我想 return 对于上述数据框的每一行,在该行中具有最大值的列的名称;例如,对于第一行,我想要 return 'column_2',对于第三行,它将 return 两个列名,因为它们具有相同的值。
我试过用Pandas的idxmax函数来实现;但是这个函数 return 只是第一次出现并且忽略了其余的可能性;就像上面第三行的例子,idxmax returns only 'column_1' 而不是 ['column_1', 'column_2'].
知道如何解决这个问题。预先感谢您的帮助。
对于每一行,您可以检查条目是否等于该行的最大值;这将形成一个布尔框架。然后,您可以 dot
使用列名对其进行乘积,以选择那些为行提供 True
的列名:
is_max = df.eq(df.max(axis=1), axis=0)
result = is_max.dot(df.columns + " ")
其中 max
的 axis=1
表示取每行的最大值,eq
的 axis=0
表示将参数(即 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