Pythonic方式在排序时将指定值放在最后位置

时间:2018-02-24 05:22:18

标签: python pandas sorting

对于系列pd.Series(['d', 'b', 'a', 'b', 'c', 'a', 'd']),如何对其进行排序:

  • a是本系列的最后一项
  • 所有其他项目均为升序

所以期望的结果将是:pd.Series(['b', 'b', 'c', 'd', 'd', 'a', 'a'])

由于

2 个答案:

答案 0 :(得分:2)

分两步进行排序:

s = pd.Series(['d', 'b', 'a', 'b', 'c', 'a', 'd'])

s.sort_values().pipe(lambda x: x.iloc[x.eq('a').values.argsort(kind='mergesort')])
# use mergesort to make sure the sorting is stable so the second sort doesn't change 
# the first sorting order when values are a and not a separately

#1    b
#3    b
#4    c
#0    d
#6    d
#2    a
#5    a
#dtype: object

或创建一个带有额外列的dummpy数据框,指示值是否等于a,然后按两列排序:

pd.concat([s.rename('s'), s.eq('a').rename('a')], axis=1).sort_values(['a', 's']).s

#1    b
#3    b
#4    c
#0    d
#6    d
#2    a
#5    a
#Name: s, dtype: object

答案 1 :(得分:1)

您可以通过对不是“a”的值进行排序然后附加所有“a”值来形成排序系列。

sorted_series = ser[ser != 'a'].append(ser[ser == 'a'])