鱼C论坛

 找回密码
 立即注册
查看: 3505|回复: 1

【新手求助】改进“学生成绩全自动统计程序”

[复制链接]
发表于 2021-2-17 15:20:29 | 显示全部楼层 |阅读模式
10鱼币
这是原来的程序
# coding=utf-8
import pandas as pd
import easygui as g
import sys
import os


#选择原文件路径


def get_file():
    confirm = g.ccbox(msg="程序简介 & 注意事项: \n\n 1.本程序可以根据Excel登分表一键生成九科总分排名以及单科排名。选择或保存文件时,   左上角会有提示,请注意左上角小标题。\n2.本程序设计初衷是为了分担老师们的排名统计工作,未经允许严禁用于商用。\n\n\n      ⚬ 注意事项:登分表内必须有且仅有\n      ‘考号’‘班别’‘姓名’‘语文’‘数学’‘外语’\n      ‘物理’‘历史’‘生物’‘地理’‘政治’‘化学’。\n        但无需按照顺序排列,本程序会自动排序。\n\n\n\n                           准备好后请单击“下一步”",
                      title='学生成绩统计程序', choices=('下一步', '退出'))
    if confirm == True:

        file = g.fileopenbox(msg='', title='请选择登分表Excel文件',
                             default=r'C:\\', filetypes=['*.xlsx'])
        if file == None or file == '.':
            sys.exit()
        else:
            return file
    else:
        sys.exit()


#得到所有科目
def get_subject(data):
    km = ['语文', '数学', '外语', '物理', '化学', '生物', '政治', '历史', '地理']
    all_subject = []
    for subject in data.columns:
        if subject in km:
            all_subject.append(subject)

    return all_subject


#猎取单科数据 ID + 班别 + 姓名 + 本科目的成绩 + 排名
def get_series(kem, orig, savep):

    with pd.ExcelWriter(savep) as writer:
        orig.to_excel(writer, sheet_name='所有科目')

        for i in kem:
            pm = i + '名次'
            df_dk = orig.loc[:, ['班别', '姓名', i, pm]]
            df_dk.sort_values(by=pm, inplace=True)
            df_dk.to_excel(writer, sheet_name=i)


def edit_all(data1):

    for kemu in data1.columns[2:]:
        data1[kemu+'名次'] = data1[kemu].rank(method='min', ascending=False)

    data1['3科总分'] = data1['语文'] + data1['数学'] + data1['外语']
    data1['3科总分名次'] = data1['3科总分'].rank(method='min', ascending=False)

    data1['9科总分'] = data1.loc[:, '语文':'地理'].sum(axis=1)
    data1['9科总分名次'] = data1['9科总分'].rank(method='min', ascending=False)

    data1.sort_values(by="9科总分名次", inplace=True)

    data2 = data1.loc[:, ['班别', '姓名', '语文', '语文名次', '数学', '数学名次',
                          '外语', '外语名次', '物理', '物理名次', '化学', '化学名次',
                          '生物', '生物名次', '政治', '政治名次', '历史', '历史名次',
                          '地理', '地理名次', '3科总分', '3科总分名次', '9科总分', '9科总分名次']]

    return data2


excel_file = get_file()
df1 = pd.read_excel(excel_file, index_col=0)
df2 = edit_all(df1)
allkm = get_subject(df1)
sp = g.filesavebox(msg='请选择保存路径及输入保存文件名(注:默认为“成绩统计表”。不需要写后缀).',
                   title='学生成绩统计程序', default=r'成绩统计表', filetypes=['*.xlsx'])
spp = sp + '.xlsx'
get_series(allkm, df2, spp)
g.msgbox("文件保存成功,感谢您的使用!\n\n\n\n\n\n                         更多功能正在开发中....\n\n\n\n\n                                                           版本号:2020/12/23", '学生成绩统计程序')


因为只能识别九科太过于机械,而且功能比较少太过于局限,现在我想改进一下:
1.给出任何科目都能一键生成成绩表,如果给出的科目在一个以上,除了主表外还额外生成这些科目的单科排名sheet。
2.以班为单位,额外生成这些科目的班级平均分排名、总分排名sheet。如:班级物理平均分 班级化学平均分 (给出的科目数)[x]科班级总分
(最好还能改进一下GUI,想生成什么科目的总分或者平均分就生成什么,不行的话就算了)
改进到一半卡壳了,请大佬指教一下,或者帮忙补全,谢谢!
import pandas as pd

#识别登分表中含有的科目
data = pd.read_excel(r'D:\Desktop\登分表.xls')
columns = list(data.columns)
subjects_list = ['语文','数学','英语','日语','外语','物理','化学','地理','生物','政治','历史']
subjects = [i for i in columns if i in subjects_list]

#新增已有科目的单科排名sheet
with pd.ExcelWriter(r'D:\Desktop\成绩统计.xls') as writer:
    data.to_excel(writer, sheet_name='所有科目')
    Personal_Information = columns.index(subjects[1])-1
    for i in subjects:
        rank = i +'单科排名'
        single_subject_ranking = data.loc[:,i]
        single_subject_ranking.sort_values(rank,inplace = True)
        single_subject_ranking.to_excel(writer,sheet = rank)

sequence = []
for i in subjects:
    data[i + '排名'] = data[i].rank(method='min', ascending=False)
    sequence.append(i,i+'排名')
data['三科总分'] = data['语文'] + data['数学'] + data['英语']
data['三科总分排名'] = data['三科总分'].rank(method = 'min',ascending = False)
data[range(subjects) + '科总分'] = data.loc[Personal_Information:].sum(axis=1)
data[range(subjects) + '科总分名次'] = data[range(subjects)].rank(method = 'min',ascending = False)
data.sort_values(by= range(subjects) + "科总分名次", inplace=True)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-25 15:28:25 From FishC Mobile | 显示全部楼层
看了半天,发现没看懂。新手路过,看大佬操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-27 15:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表