[英]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.