合并队伍,并选出该队队员最高分作为最终队伍成绩。#目标是按照队员最高分数计入为 队伍分数
#首先是我们的数据集 来自腾讯微云
#https://share.weiyun.com/5ov0DKt
#下载好之后直接把两个文件放入D盘即可,然后直接复制下面的内容就OK啦####查看某列中的答案长什么样子(以便一会制作标准答案 来判分)####
import pandas as pd
import numpy as np
data=pd.read_excel('D:/编程大赛B题.xls',header=0)
aa=data["编程2"][0]
aa####统计A卷的得分###############
import pandas as pd
import numpy as np
data=pd.read_excel('D:/编程大赛A题.xls',header=0)#或者可以选择路径(如下)
#data=pd.read_csv('D:/D/1.csv',header=0)
#data=pd.read_csv('C:/Users/fafa/1.csv',header=0)#定义 得分 函数:
def score(a):
s=0
if a[3]=="C": #第一列的正确答案
s+=10 #第一列的分值
if a[4]=="D": #第二列的正确答案
s+=10 #第二列的分值
if a[5]=="C": #第三列的正确答案
s+=10 #第三列的分值
if a[6]=="B": #第四列的正确答案
s+=10 #第四列的分值
if a[7]=="A": #第五列的正确答案
s+=10 #第五列的分值
if len(str(a[8]).split(","))==5: #填空题按照逗号分割后选择有5个元素的继续判断
if str(a[8]).split(",")[0] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案
s+=10 #第五列的分值
if str(a[8]).split(",")[1] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案
s+=10 #第五列的分值
if str(a[8]).split(",")[2] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案
s+=10 #第五列的分值
if str(a[8]).split(",")[3] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案
s+=10 #第五列的分值
if str(a[8]).split(",")[4] in "流程线,起止框,输入输出框,判断框,处理框": #第五列的正确答案
s+=10 #第五列的分值
return s#增加一列"得分"
data["得分"]=[score(data.iloc[i]) for i in range(len(data.index))]
#按照max得分统计队伍
data2=data.groupby(["队伍名称"],as_index=False)["得分"].max()
#按照sum得分统计队伍
#data2=data.groupby(["队伍"],as_index=False)["得分"].sum()#按照 个数 统计 队伍
#data.groupby(["队伍"]).size()
#改名字
data3=data2.rename(columns={"队伍":"队伍名称","得分":"赛题A最终分数"})
#拍序(按照最终分数)
dataA=data3.sort_values(by="赛题A最终分数",ascending=False)
dataA
##########################################至此就结束了#############################################统计B卷的得分###############
import pandas as pd
import numpy as np
data=pd.read_excel('D:/编程大赛B题.xls',header=0)
#定义 得分 函数:
def score(a):
s=0
if a[3]=="x=input()\nx=int(x)\nif x>=60:\n y=\"及格\"\nelse:\n y=\"不及格\"\nprint(y)": #第一列的正确答案
s+=50 #第一列的分值
if a[4]=="x=input()\nx=int(x)\nif x>0:\n y=\"正\"\nelse:\n y=\"负\"\nprint(y)": #第二列的正确答案
s+=50 #第二列的分值
return s
#增加一列"得分"
data["得分"]=[score(data.iloc[i]) for i in range(len(data.index))]#按照max得分统计队伍
data2=data.groupby(["队伍名称"],as_index=False)["得分"].max()#按照sum得分统计队伍
#改名字
data3=data2.rename(columns={"队伍":"队伍名称","得分":"赛题B最终分数"})
#拍序(按照最终分数)
dataB=data3.sort_values(by="赛题B最终分数",ascending=False)
dataB
##############################################至此就结束############################################
#############后面的内容是如何关联多张成绩单,然后求和排名#########
#按照“”队伍名称”关联多个表格
dataD=pd.merge(dataA,dataB,on="队伍名称",how="outer")
#增加一列总分
dataD["总分"]=dataD.sum(axis=1)
#排序(按照最终分数)
dataD=dataD.sort_values(by="总分",ascending=False)
dataD
合并队伍,并选出该队队员最高分作为最终队伍成绩。
关联两个表格
关联两个表格##################################################################################
###################以下内容就是其他的一些小技巧啦,和这个没有关系啦################
##############按列求和##########
data4.eval("总分 = 分数A+2*分数B",inplace=True)
#inplace参数表示是否在原数据上操作inplace=False将会生成新的DataFrame
#方法2
data4['总分'] = data4.apply(lambda x:x['分数A']+2*x['分数B'],axis=1)
data4
###################条件查询########
data4.query("分数A>1")
data4
If you are interested in this topic.
You can get in touch with me.
18234056952(Tel wechat qq)
网友评论