我不僅要找到資料幀行中的最大值,還要找到具有該值的特定列。如果有多個具有該值的列,則回傳所有列的串列或僅回傳一列都可以。
在這種情況下,我特別關注為單個給定行執行此操作,但是如果有一個可以應用于資料框的解決方案,那也會很棒。
下面是我的意思的粗略概念。row.max()回傳最大值,但我想要的函式row.max_col()回傳具有最大值的列的名稱。
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [4,5,6]})
>>> row = df.iloc[0]
>>> row.max()
4
>>> row.max_col()
Index(['B'], dtype='object')
我目前的做法是這樣的:
>>> row.index[row.eq(row.max())]
Index(['B'], dtype='object')
我不熟悉大熊貓如何優化所有內容,所以如果我在這里錯了,我深表歉意,但我假設它的row.index[row.eq(...)]增長與列數成正比。我正在處理少量列,所以這應該不是一個大問題,但我很好奇是否有辦法以與我可以使用的方式相同的方式獲取列名,.max()而無需做額外的作業之后尋找相等的值。
uj5u.com熱心網友回復:
使用idxmax:
>>> df
A B
0 1 4
1 2 5
2 3 6
>>> df.iloc[0].idxmax()
'B'
uj5u.com熱心網友回復:
假設源 DataFrame 包含:
A B
0 1 4
1 7 5
2 3 6
3 9 8
然后,要查找每行(不僅是第0行)中包含最大值的列名,請運行:
result = df.apply('idxmax', axis=1)
結果是:
0 B
1 A
2 B
3 A
dtype: object
但是如果你想得到持有最大值的列的整數索引,把上面的代碼改成:
result = df.columns.get_indexer(df.apply('idxmax', axis=1))
這次的結果是:
array([1, 0, 1, 0], dtype=int64)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386224.html
下一篇:通過迭代編輯pd資料框
