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])
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
给出上述输入数据,这是所需的输出。
result
D -7.679
F 4.342
A -6.770
E -0.093
B 6.110
C 5.670
答案 0 :(得分:5)
你可以使用argsort
和kind='mergesort'
来获得保持顺序的排序行索引,然后简单地将数据框索引到所需输出的数据框中,如下所示 -
df.iloc[new_order.argsort(kind='mergesort')]
示例运行 -
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
答案 1 :(得分:2)