2.0版的不足之处有很多,最大的不足就是只能分成9个时间段考试,和平常的需求相距甚远。日常工作中为了考试的紧凑,常常采用 语数外+物/历+四选二同时开考,只需要5个时间段,两种时间段的差异显然后一种的组织更为紧凑,这是对3.0版本提出的要求。
为了方便调试,把pandas的一些默认参数改改
import pandas as pd
import numpy as np #用来随机排列df里的行
#下面这两行用来在测试的时候调整参数和表达式
# 这两个参数的默认设置都是False 中文行列名的对齐必备
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#最大显××行,××列
pd.set_option('display.max_rows', 925)
pd.set_option('display.max_columns',11)
先来分析应当要考虑的一些属性
分析物理和历史同时开考,某考生在这个时间段只考两科中的一科,设置考生的首选科属性为两种:物和历。所以考生信息中一定要有能提取出物和历的相应栏目,如果有直接提供最好。我在一开始的时候简化问题就独立提供了一列 名为首选,值为 物或历。
分析四选二要一起考试,考生只是随机分配到考室的话在收发试卷上的难度就及其恐怖。四选二共有六种组合:化生,化政,化地,生政,生地,政地,在没有限制的随机分配下会造成同一个考室内A考生选择 化生,在A后一个座位的B选择的是 政地……如此一个考室内的发卷工作就会非常复杂。从这点分析,一个考室内的人尽量是某一种选科的考生,那么收发试卷的工作就最为简单。如果限于考室数量不足,个别考室的考生是有共同选科的两种选科考生(如化地与生地),也可以接受。这点对考生信息提出的要求是要有选科组合这一属性。我把这一列命名为‘组合’,值为化生,化政,化地,生政,生地,政地这六种。
综合分析设定考生信息数据中必不可少的如图所示:
组合这一栏里只有六种值,下图截图展示了一部分:
读取,修正df的内容.
path0 = 'F:\python-code\处理过数据1\所有考生选科信息.xlsx'
path1 = 'F:\python-code\数据源\考场信息.xlsx'
data = pd