中学成绩分析-提取每科最高分学生名单
本帖最后由 lvcaolhx 于 2019-11-20 10:53 编辑import pandas as pd#load_data 1.0版
def load_data():
global start,end,sort_kemu_list,df
df=pd.read_excel('数据1_2.xlsx',sheet_name='成绩',usecols=list(range(0,10)))
df['总分']=df.loc[:,'语文':'生物'].sum(axis=1)
df['班名']=df.groupby('班级').总分.rank(method='min',ascending=False).astype(int)
df['年名']=df.总分.rank(method='min',ascending=False).astype(int)
source_biaot_list=list(df.columns) #原始数据表头
print( source_biaot_list)
start,end=input('>>> 请输入科目起始列和结束列(从0开始数),空格隔开,回车结束:').split()
kemudata_cols=source_biaot_list #科目表头
default_cols=['语文','数学','外语','英语','物理','化学', '生物', '政治','历史', '地理']
sort_kemu_list= #将科目表头按照设定的顺序排列
source_biaot_list=sort_kemu_list
sort_biaot_list= source_biaot_list
print(sort_biaot_list)
df=df #将最终表的列序按照设定的顺序排列
return df
load_data()
#df==111]
def get_col(x_df,colx):
col0=['姓名','班级']
col0.extend(colx.split(' '))
df2=x_df
return df2.loc==df2.max()]
yuwen_df=get_col(df,'语文').T
yuwen_df.index = ['姓名','班级','最高分']
shuxue_df=get_col(df,'数学').T
shuxue_df.index = ['姓名','班级','最高分']
print(yuwen_df)
yingyu_df=get_col(df,'英语').T
yingyu_df.index = ['姓名','班级','最高分']
wuli_df=get_col(df,'物理').T
wuli_df.index = ['姓名','班级','最高分']
shengwu_df=get_col(df,'生物').T
shengwu_df.index = ['姓名','班级','最高分']
huaxue_df=get_col(df,'化学').T
huaxue_df.index = ['姓名','班级','最高分']
print(shuxue_df)
print(yingyu_df)
result=pd.merge(yuwen_df,shuxue_df,left_index=True, right_index=True, how='left')
result=pd.merge(result,yingyu_df,left_index=True, right_index=True, how='left')
result=pd.merge(result,wuli_df,left_index=True, right_index=True, how='left')
result=pd.merge(result,huaxue_df,left_index=True, right_index=True, how='left')
result=pd.merge(result,shengwu_df,left_index=True, right_index=True, how='left')
print(result)
result.to_excel(r'D:\test\retmax.xls')
思维混乱,代码拼凑而成,能优雅的地方很多;
程序输出与目标输出表格相差很大,实在没能力了,请各位大神指点
数据姓名脱敏处理
请各位大神,代码优化,输出格式匹配目标表格.
源代码与数据:
链接:https://pan.baidu.com/s/1lW8RfSmI4sdUeJKUVClf2Q
提取码:2d1l
复制这段内容后打开百度网盘手机App,操作更方便哦
更新:
输出表头,简化了代码:
import pandas as pd#2.0版
def load_data():
global start,end,sort_kemu_list,df
df=pd.read_excel('数据2.xlsx',sheet_name='成绩',usecols=list(range(0,10)))
df['总分']=df.loc[:,'语文':'生物'].sum(axis=1)
df['班名']=df.groupby('班级').总分.rank(method='min',ascending=False).astype(int)
df['年名']=df.总分.rank(method='min',ascending=False).astype(int)
source_biaot_list=list(df.columns) #原始数据表头
print( source_biaot_list)
start,end=input('>>> 请输入科目起始列和结束列(从0开始数),空格隔开,回车结束:').split()
kemudata_cols=source_biaot_list #科目表头
default_cols=['语文','数学','外语','英语','物理','化学', '生物', '政治','历史', '地理']
sort_kemu_list= #将科目表头按照设定的顺序排列
source_biaot_list=sort_kemu_list
sort_biaot_list= source_biaot_list
print(sort_biaot_list)
df=df #将最终表的列序按照设定的顺序排列
return df
def get_col(x_df,colx):
col0=['姓名','班级']
col0.extend(colx.split(' '))
df2=x_df
df3=df2.loc==df2.max()]
df3.reset_index(drop=True, inplace=True)#重置筛选后的索引
df3=df3.T
df3.index =['姓名','班级','最高分'] #重设行索引
df3.columns = colx + df3.columns.astype(str) #重设列索引
return df3
load_data()
yuwen_df=get_col(df,'语文')
shuxue_df=get_col(df,'数学')
print(yuwen_df)
yingyu_df=get_col(df,'英语')
wuli_df=get_col(df,'物理')
shengwu_df=get_col(df,'生物')
huaxue_df=get_col(df,'化学')
print(shuxue_df)
print(yingyu_df)
result=pd.merge(yuwen_df,shuxue_df,left_index=True, right_index=True, how='left')
result=pd.merge(result,yingyu_df,left_index=True, right_index=True, how='left')
result=pd.merge(result,wuli_df,left_index=True, right_index=True, how='left')
result=pd.merge(result,huaxue_df,left_index=True, right_index=True, how='left')
result=pd.merge(result,shengwu_df,left_index=True, right_index=True, how='left')
print(result)
get_col自定义涵数可以不用,直接用df['姓名','班级','语文'].max()最得语文最高分相关数据
最主要的输出成目标表格那样的格式 这是什么程序语言啊? ds3700 发表于 2019-11-16 19:35
这是什么程序语言啊?
python来的 你用xlrd和xlwt就可以 pandas我不知道 还没了解过这模块 我之前写学校手机成绩表格就是这两个模块弄得
jideco 发表于 2019-11-16 19:42
同感,用函数不就解决了吗
我是习惯用excel函数 勇敢南山 发表于 2019-11-16 19:41
python来的
嗯嗯 谢谢 看出来了 也懂点 自学的 大二准备学 用excel做更实用吧!毕竟教师多用它统计学生数据。
页:
[1]
2