好友
阅读权限 20
听众
最后登录 1970-1-1
本帖最后由 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[int(start):int(end)+1] #科目表头
default_cols=['语文','数学','外语','英语','物理','化学', '生物', '政治','历史', '地理']
sort_kemu_list=[x for i in default_cols for x in source_biaot_list if i in x] #将科目表头按照设定的顺序排列
source_biaot_list[int(start):int(end)+1]=sort_kemu_list
sort_biaot_list= source_biaot_list
print(sort_biaot_list)
df=df[sort_biaot_list] #将最终表的列序按照设定的顺序排列
return df
load_data()
#df[df['语文']==111]
def get_col(x_df,colx):
col0=['姓名','班级']
col0.extend(colx.split(' '))
df2=x_df[col0]
return df2.loc[df2[colx]==df2[colx].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[int(start):int(end)+1] #科目表头
default_cols=['语文','数学','外语','英语','物理','化学', '生物', '政治','历史', '地理']
sort_kemu_list=[x for i in default_cols for x in source_biaot_list if i in x] #将科目表头按照设定的顺序排列
source_biaot_list[int(start):int(end)+1]=sort_kemu_list
sort_biaot_list= source_biaot_list
print(sort_biaot_list)
df=df[sort_biaot_list] #将最终表的列序按照设定的顺序排列
return df
def get_col(x_df,colx):
col0=['姓名','班级']
col0.extend(colx.split(' '))
df2=x_df[col0]
df3=df2.loc[df2[colx]==df2[colx].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)
输出结果与目标表格
免费评分
查看全部评分