首页 > 解决方案 > 如何在熊猫数据框中按顺序获取最高、次高等数字的索引和列?

问题描述

我有一个通用形式的 pandas DataFrame(我们称之为df

    A       C       D       E       F
0   0.4     0.1     0.2     0       0.7
1   0       0.2     0       0.5     0.6
2   0.1     0.5     0       0       0
3   0       0       0       0.8     0
4   0.8     0.1     0       0       0
5   0       0.9     0       0       0

虽然每个轴会更长(21 列,不同的索引长度)。

我需要在整个DataFrame中找到最大的数字,并提取索引和列名,然后是下一个最大的(如果不在同一个索引中)并再次找到索引和列名,依此类推。

我当然可以将每个索引提取为系列 ( pd.Index.to_series) 或列表,并逐项进行。但我认为有一种更有效的方式使用数据帧(因为我无法预测最终将使用的最大索引大小),我似乎无法找到/想到。

如果我只需要的话,我已经找到了很多使用df.max()or来获得最大值的答案。df.idmax()

标签: pythonpandasdataframe

解决方案


使用以下内容:

df.stack().reset_index().sort_values(by=0, ascending=False)
Out[168]: 
    level_0 level_1    0
26        5       C  0.9
18        3       E  0.8
20        4       A  0.8
4         0       F  0.7
9         1       F  0.6
8         1       E  0.5
11        2       C  0.5
0         0       A  0.4
6         1       C  0.2
2         0       D  0.2
10        2       A  0.1
1         0       C  0.1
21        4       C  0.1
27        5       D  0.0
28        5       E  0.0
25        5       A  0.0
24        4       F  0.0
23        4       E  0.0
22        4       D  0.0
15        3       A  0.0
19        3       F  0.0
17        3       D  0.0
16        3       C  0.0
14        2       F  0.0
13        2       E  0.0
12        2       D  0.0
7         1       D  0.0
5         1       A  0.0
3         0       E  0.0
29        5       F  0.0

推荐阅读