Stackoverflow:有效地获取每行数据帧中最小到最大的顺序

时间:2019-05-09 22:07:34

标签: python pandas

此数据框具有成千上万的行,因此似乎无法负担得起apply()的费用。我有一个看起来像这样的数据框:

          1         2         3         4         5         6
         Ax        Ax        Ax        Ax        Ax        Ax
      delta     delta     delta     delta     delta     delta
0  0.011475  0.000244  0.009277  0.003174  0.002197  0.003418
1  0.011515  0.000529  0.009481  0.003215  0.002157  0.003621
2  0.011556  0.000326  0.009440  0.003255  0.002116  0.003581
3  0.011556  0.000326  0.009440  0.003255  0.002116  0.003581
4  0.011556  0.000326  0.009440  0.003255  0.002116  0.003581
5  0.011556  0.000326  0.009196  0.003255  0.002360  0.003581
6  0.011353  0.000366  0.009155  0.003296  0.002319  0.003540
7  0.011353  0.000610  0.009155  0.003296  0.002563  0.003540
8  0.011312  0.000570  0.008952  0.003255  0.002604  0.003581
9  0.011312  0.000570  0.008952  0.003255  0.002604  0.003581

我想(有效地)确定每行从最小到最大的顺序。显然,我可以使用apply确定每一行的大小,但是我想尽可能地将其向量化。

输出的精确格式不是特别重要;但是我需要知道每一行的列顺序是什么。因此,例如,第0行为[5, 2, 4, 6, 3, 1]

是否可以将数据框缩小为以下内容:

0  (1, 0.011475)  (2, 0.000244)  (3, 0.009277)  (4, 0.003174)  (5, 0.002197)  (6, 0.003418)

,然后按行排序-不使用apply?有什么办法可以“重新实现”值?

我知道idxmax,是否有类似的方法来获得订单?

1 个答案:

答案 0 :(得分:1)

您要的是基于行的排名吗?

df

      0         1         2
0 -0.782973  0.601814 -0.154782
1  0.718408 -0.882676 -1.008940
2  0.144548  0.284833 -1.738883
3  0.754866  0.753008  1.118544
4  0.968328 -0.177870 -1.283252

df.rank(method='first', axis=1).astype(int)
    0  1  2
0  1  3  2
1  3  2  1
2  2  3  1
3  2  1  3
4  3  2  1

根据数据,您可能需要调整使用的方法,以及是否要在最后强制转换为int。