如何依次获取数据帧中最高、次高等数字的索引和列?

2024-10-01 22:32:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个一般形式的数据框架(我们称之为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列,索引长度不同)

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

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

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


Tags: to数据方法答案框架df列表index
2条回答

使用以下命令:

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

尝试:

print(
    df.reset_index()
    .melt("index")
    .sort_values(by="value", ascending=False)[["index", "variable"]]
)

印刷品:

    index variable
11      5        C
21      3        E
4       4        A
24      0        F
25      1        F
8       2        C
19      1        E
0       0        A
7       1        C
12      0        D
2       2        A
6       0        C
10      4        C
23      5        E
22      4        E
26      2        F
27      3        F
28      4        F
20      2        E
15      3        D
18      0        E
17      5        D
16      4        D
1       1        A
14      2        D
13      1        D
9       3        C
5       5        A
3       3        A
29      5        F

相关问题 更多 >

    热门问题