根据列表重新排列pandas数据帧的行并保持顺序

the*_*ist 5 numpy pandas

import numpy as np 
import pandas as pd

df = pd.DataFrame(data={'result':[-6.77,6.11,5.67,-7.679,-0.0930,4.342]}\
,index=['A','B','C','D','E','F'])
new_order = np.array([1,2,2,0,1,0])
Run Code Online (Sandbox Code Playgroud)

所述new_ordernumpy的阵列分配的每一行至三个基团[0,1或2]中的一个.我想重新排列行,df以便第0组中的那些行首先显示,然后是1,最后是2.在三组中的每一组中,初始排序应保持不变.

在开始时,df的排列如下:

   result
A  -6.770
B   6.110
C   5.670
D  -7.679
E  -0.093
F   4.342
Run Code Online (Sandbox Code Playgroud)

给出上述输入数据,这是所需的输出.

   result
D  -7.679
F   4.342
A  -6.770
E  -0.093
B   6.110
C   5.670
Run Code Online (Sandbox Code Playgroud)

Div*_*kar 5

您可以使用argsortwith kind='mergesort'来获取保持顺序的排序行索引,然后使用所需输出的索引简单地索引到数据框中,如下所示 -

df.iloc[new_order.argsort(kind='mergesort')]
Run Code Online (Sandbox Code Playgroud)

样品运行 -

In [2]: df
Out[2]: 
   result
A  -6.770
B   6.110
C   5.670
D  -7.679
E  -0.093
F   4.342

In [3]: df.iloc[new_order.argsort(kind='mergesort')]
Out[3]: 
   result
D  -7.679
F   4.342
A  -6.770
E  -0.093
B   6.110
C   5.670
Run Code Online (Sandbox Code Playgroud)