如何按指定顺序对熊猫列进行排序?

时间:2019-05-29 02:12:23

标签: python pandas

我有一个如下所示的df:

index  life_stage
1      Early Childhood
2      Birth
3      Infancy
...

life_stage列的排序不正确,我不能依靠字母顺序。

正确的顺序应该是

Birth
Infancy
Early Childhood

是否可以根据我在Pandas中指定的顺序对生命周期列进行排序?

2 个答案:

答案 0 :(得分:1)

让我们使用pd.Categorical将“ life_stage”转换为有序的分类列:

df['life_stage'] = pd.Categorical(
    df['life_stage'], 
    categories=['Birth', 'Infancy', 'Early Childhood'], 
    ordered=True
)

请注意我为pd.Categorical指定类别的顺序。现在,使用sort_values呼叫life_stage

df.sort_values(by=['life_stage'])

   index       life_stage
2      1            Birth
1      2          Infancy
0      3  Early Childhood

作为参考,按字母顺序对“ life_stage”进行排序会使您

   index       life_stage
2      1            Birth
0      3  Early Childhood   # wrong!
1      2          Infancy   

答案 1 :(得分:1)

IIUC,您想订购pd.Categorical

s = pd.Categorical(['Infancy', 'Birth', 'Early Childhood'],
               categories=['Birth', 'Infancy', 'Early Childhood'],
               ordered=True)
s.sort_values()

输出:

[Birth, Infancy, Early Childhood]
Categories (3, object): [Birth < Infancy < Early Childhood]