Pandas Dataframe:获取最大元素的索引

Pandas Dataframe: get index of max element

我正在寻找一种方法来获取 Pandas DataFrame 中最大元素的索引和列。到目前为止,这是我的代码:

idx = range(0, 50, 5)
col = range(0, 50, 5)
scores = pd.DataFrame(np.zeros((len(idx), len(col))), index=idx, columns=col, dtype=float)
scores.loc[11, 16] = 5 #Assign a random element

这给了我以下 DataFrame:

  | 1   6   11  16  21  26  31  36  41  46
------------------------------------------
1 | 0   0   0   0   0   0   0   0   0   0
6 | 0   0   0   0   0   0   0   0   0   0
11| 0   0   0   5   0   0   0   0   0   0
16| 0   0   0   0   0   0   0   0   0   0
21| 0   0   0   0   0   0   0   0   0   0
26| 0   0   0   0   0   0   0   0   0   0
31| 0   0   0   0   0   0   0   0   0   0
36| 0   0   0   0   0   0   0   0   0   0
41| 0   0   0   0   0   0   0   0   0   0
46| 0   0   0   0   0   0   0   0   0   0

之后,我使用unstack方法:

unstacked = scores.unstack().copy()
unstacked.sort(ascending=False)

这给了我:

16  11    5
46  46    0
16  31    0
11  31    0
    36    0
...

如何获取最大值的索引和列?我想得到一些包含 (16, 11).

的数组或元组的内容

您正在寻找 idxmax :

In [1332]: x
Out[1332]: 
   1  6  11  16  21  26  31  36  41  46
0  0  0   0   0   0   0   0   0   0   0
1  0  0   0   0   0   0   0   0   0   0
2  0  0   5   0   0   0   0   0   0   0
3  0  0   0   0   0   0   0   0   0   0
4  0  0   0   0   0   0   0   0   0   0
5  0  0   0   0   0   0   0   0   0   0
6  0  0   0   0   0   0   0   0   0   0
7  0  0   0   0   0   0   0   0   0   0
8  0  0   0   0   0   0   0   0   0   0
9  0  0   0   0   0   0   0   0   0   0

最大值行:

In [1337]: max(x.idxmax())
Out[1337]: 2

最大值列(太多 maxs):

In [1359]: x.max()[x.max() == x.max(axis=1).max()].index
Out[1359]: Index([u'11'], dtype='object')
x.max()[x.max() == x.max(axis=1).max()].index 

这可以获取列,但 max(x.idxmax()) 仅 returns 索引本身的数值最大值,而不是 table 中最大值的索引(只是在这个例子,因为其他一切都是 0)。另一种选择是:

s = x.max()[x.max() == x.max(index=1).max()].index
s = str(s[0])
max_index = x.idxmax()[s]