簡體   English   中英

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

[英]pandas idxmax return all columns with maximum value

我有一個 dataframe,如下所示:

column_1    column_2
2           3
6           4
5           5
.
.
.

我想為上述 dataframe 的每一行返回該行中具有最大值的列的名稱; 例如,對於第一行,我想返回“column_2”,對於第三行,它將返回兩個列名,因為它們都具有相同的值。

我試圖通過使用 Pandas 的 idxmax function 來實現它; 但是這個 function 只返回第一次出現並忽略 rest 的可能性; 就像上面第三行的例子一樣,idxmax 只返回 'column_1' 而不是 ['column_1', 'column_2']。

任何想法如何解決這個問題。 在此先感謝您的幫助。

對於每一行,您可以檢查條目是否等於該行的最大值; 這將形成一個布爾框架。 然后,您可以將其與列名稱進行dot積,以選擇為行提供True列名稱:

is_max = df.eq(df.max(axis=1), axis=0)
result = is_max.dot(df.columns + " ")

其中axis=1 of max表示取每行的最大值, 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

除了 numpy 點外,我們還可以使用 numpy 廣播

mask = df.eq(df.max(axis=1), axis=0)
df['max'] = ((df.columns * mask)[mask]
             .agg(lambda row: list(row.dropna()), axis=1))
print(df)

   column_1  column_2                   max
0         2         3            [column_2]
1         6         4            [column_1]
2         5         5  [column_1, column_2]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM