pandas自带的sort_values已经算是足够强大了,能够满足大部分需求,但是偶然,会有定制排序的需求,比如在输出数据表格的时候,想要把重点项目放在最前面。下面的方法,介绍了一种排序思路:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #构建测试数据 df1 = pd.DataFrame({ 'uid': ['小A', '小B', '小A', '小A', '小A', '小B', '小B', '小A', '小B', '小A'], 'day': ['2021-09-25', '2021-09-25', '2021-09-25', '2021-09-26', '2021-09-26', '2021-09-26', '2021-09-26', '2021-09-27', '2021-09-25', '2021-09-25'], 'sub': ['语文', '语文', '数学', '语文', '数学', '语文', '数学', '语文', '英语', '英语'], 'val': [95, 95, 74, 87, 65, 77, 66, 32 , 55, 90]}, columns=['uid', 'day', 'sub', 'val']) sortList = ['数学', '语文', '英语'] #排序依据数组,依据sub,科目 # df1.reset_index(inplace=True) #视数据实际情况,排序字段不能是索引 df1['sub'] = df1['sub'].astype('category') #重新设置字段类型,为排序做准备 df1['sub'].cat.set_categories(sortList, inplace=True) #设置排序依据 df1.sort_values('sub', inplace=True) #排序操作 print(df1) |
输出:
———–
uid day sub val
2 小A 2021-09-25 数学 74
4 小A 2021-09-26 数学 65
6 小B 2021-09-26 数学 66
0 小A 2021-09-25 语文 95
1 小B 2021-09-25 语文 95
3 小A 2021-09-26 语文 87
5 小B 2021-09-26 语文 77
7 小A 2021-09-27 语文 32
8 小B 2021-09-25 英语 55
9 小A 2021-09-25 英语 90
———–
如上,既完成了根据sortList预定义顺序的排序操作
不过有个地方需要注意:如果sub列里包含sortList没有的值,这里的输出结果可能会出现未知异常
——
over
转载请注明出处: http://www.jiangkl.com/2021/10/dataframe_sort_list