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_order
numpy的阵列分配的每一行至三个基团[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)
您可以使用argsort
with 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)