背景
新高考背景下涉及到“等级转换赋分”的科目,是政治、地理、化学、生物4门,这4门要以等级赋分后的成绩计入总成绩。
公式
案例:
所用到的包
此项目主要运用到了pandas、sympy(方程式求解)、operator 模块,对我们的数据集不改变原顺序的情况下保存一个新表。
主要代码步骤
1.读入数据,根据程序排序
# An highlighted block
data=pd.read_excel(biaoge)
aa=data.to_dict(orient='records')
sorted_score=sorted(aa,key=itemgetter('成绩'),reverse=True)
2.找到根据比例划分后各区间对应的最高分和最低分
sa2=sorted_score[0]['成绩'] # 最高分
sa1=sorted_score[int(0.15*l)-1]['成绩']
3.进行分数转化并保留一位小数,为了防止分母为0的情况,使用try except 进行代码编写
x = sympy.Symbol('x')
all=[]
for idx,i in enumerate(sorted_score,1):
dic={}
num=i['成绩']
if idx<=int(0.15*l):
try:
result=sympy.solve((100.0-x)*1/(x-86.0)-(sa2-num)*1/(num-sa1),[x])
result=format(result[0],'.1f')
i['转换后的成绩:']=result
except:# 分母为0的情况下
result=sympy.solve((100.0-x)*1/(x-86.0)-(sa2-num)*1/(num-sa1-0.001),[x])
result=format(result[0],'.1f')
# print(type(result))
i['转换后的成绩:'] = result
4.最后根据编号排序,返回原始数据,保存到excel中
finally_result=sorted_score=sorted(sorted_score,key=itemgetter('序号'))
df = pd.DataFrame(finally_result)
name=biaoge.replace('.xls','').replace('.xlsx','')
df.to_excel(f"./data/排序过后的{name}.xlsx",index=False)
结果展示
原数据
转换后的数据
完成!!!