Monthly Archives: 十月 2021

Hello World

条件语句的执行顺序

刚刚有碰上了一个python的无厘头问题:
if len(arr) >= 3 & len(arr[2]) > 0: xxx
arr是list,长度可能是2,也可能是3。上面这条语句,按理说正常语言都没问题,程序会在第一个条件为true以后,再去判断第二个,所以不会出现数组越界
maxos里,python3.7执行正常
到了linux里,python3.4,居然报了list越界错误。。。
。。。好吧,改改写法:
if len(arr) >= 3: if len(arr[2]) > 0: xxx
拆成倆if,执行通过
果然真的是先去执行第二个判断条件。。。

Hello World

dataframe根据给定list排序

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