此数据框具有成千上万的行,因此似乎无法负担得起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
,是否有类似的方法来获得订单?
答案 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。