对于系列pd.Series(['d', 'b', 'a', 'b', 'c', 'a', 'd'])
,如何对其进行排序:
a
是本系列的最后一项所以期望的结果将是:pd.Series(['b', 'b', 'c', 'd', 'd', 'a', 'a'])
由于
答案 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'])