如何对索引和值的熊猫系列进行排序?

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)

我想按值排序,也要按索引排序。因此,我将在顶部使用最小的数字,但要遵守索引的字母顺序。

roj*_*eer 6

我想你可以先把这个系列转移到一个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)


piR*_*red 6

使用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)