pce*_*con 6 python sorting series pandas
我有一个系列,看起来像:
146tf150p 1.000000
havent 1.000000
home 1.000000
okie 1.000000
thanx 1.000000
er 1.000000
anything 1.000000
lei 1.000000
nite 1.000000
yup 1.000000
thank 1.000000
ok 1.000000
where 1.000000
beerage 1.000000
anytime 1.000000
too 1.000000
done 1.000000
645 1.000000
tick 0.980166
blank 0.932702
dtype: float64
Run Code Online (Sandbox Code Playgroud)
我想按值排序,也要按索引排序。因此,我将在顶部使用最小的数字,但要遵守索引的字母顺序。
我想你可以先把这个系列转移到一个DataFrame,其中的列是系列的索引和值。然后对 DataFrame 进行排序。要进行传输,只需调用reset_index
本系列的函数并设置drop=False
,即可获得数据帧。
以下是示例:
In [38]: s
Out[38]:
0
146tf150p 1.000000
havent 1.000000
home 1.000000
okie 1.000000
thanx 1.000000
er 1.000000
anything 1.000000
lei 1.000000
nite 1.000000
yup 1.000000
thank 1.000000
ok 1.000000
where 1.000000
beerage 1.000000
anytime 1.000000
too 1.000000
done 1.000000
645 1.000000
tick 0.980166
blank 0.932702
Name: 1, dtype: float64
# drop=False, convert to a dataframe
In [39]: df = s.reset_index(drop=False)
# sorting by two columns, first 1 then 0
In [40]: df.sort_values([1,0])
Out[40]:
0 1
19 blank 0.932702
18 tick 0.980166
0 146tf150p 1.000000
17 645 1.000000
6 anything 1.000000
14 anytime 1.000000
13 beerage 1.000000
16 done 1.000000
5 er 1.000000
1 havent 1.000000
2 home 1.000000
7 lei 1.000000
8 nite 1.000000
11 ok 1.000000
3 okie 1.000000
10 thank 1.000000
4 thanx 1.000000
15 too 1.000000
12 where 1.000000
9 yup 1.000000
# sorting by two columns, first 0 column then 1 column
In [41]: df.sort_values([0, 1])
Out[41]:
0 1
0 146tf150p 1.000000
17 645 1.000000
6 anything 1.000000
14 anytime 1.000000
13 beerage 1.000000
19 blank 0.932702
16 done 1.000000
5 er 1.000000
1 havent 1.000000
2 home 1.000000
7 lei 1.000000
8 nite 1.000000
11 ok 1.000000
3 okie 1.000000
10 thank 1.000000
4 thanx 1.000000
18 tick 0.980166
15 too 1.000000
12 where 1.000000
9 yup 1.000000
Run Code Online (Sandbox Code Playgroud)
使用np.lexsort
得到有序的位置,并传递给iloc
ser.iloc[np.lexsort([ser.index, ser.values])]
blank 0.932702
tick 0.980166
146tf150p 1.000000
645 1.000000
anything 1.000000
anytime 1.000000
beerage 1.000000
done 1.000000
er 1.000000
havent 1.000000
home 1.000000
lei 1.000000
nite 1.000000
ok 1.000000
okie 1.000000
thank 1.000000
thanx 1.000000
too 1.000000
where 1.000000
yup 1.000000
dtype: float64
Run Code Online (Sandbox Code Playgroud)