獲取多科成績
之前我們講了如何取得數學這一科的成績,但是我們要計算總成績的話,就需要獲得其他幾科的成績,一般有語數英等,這裡我們增加一門語文,文檔和命名規則類似。
然後,我們要改造一下我們代碼,使它能自動讀取不同的科目數據。
這個就是所謂的重構,我們將原先讀取數學數據的代碼,改造成一個函數。
def get_xueke_score(xueke): base_file_path = os.path.join(files_dir,xueke) shuxue_grade_names = os.listdir(base_file_path) print(shuxue_grade_names) one_pd = pd.DataFrame() for i, g in enumerate(shuxue_grade_names): grade_nu = g[:-7] ban_nu = int(g[len(grade_nu):-5]) temp_pd = pd.read_excel(os.path.join(base_file_path, g)) temp_pd['年級'] = grade_nu temp_pd['班級'] = ban_zh.get(ban_nu) def format_cj(x): if not x: return 0 if x=='請假': return -1 return int(x) if i == 0: one_pd = temp_pd else: one_pd = one_pd.append(temp_pd) one_pd['成績'] = one_pd['成績'].apply(format_cj) return one_pd考慮到成績分數的處理都類似,所以,我們把格式化分數的函數提交到取分數的函數中。
這樣,我們就可以在後面通過循環科目目錄,來循環讀取不同科目的分數。
total_pd = pd.DataFrame()for i, x in enumerate(xueke_file_names): rename = {'成績': x+'成績'} one_pd = get_xueke_score(x) one_pd = one_pd.rename(columns=rename) one_pd = one_pd.set_index('學號') if i==0: total_pd = one_pd.copy() else: one_pd = one_pd.drop(['姓名','年級','班級'],axis=1) total_pd = total_pd.join(one_pd)考慮到匯總表中的成績是分數學成績、語文成績等等,我們重新命名了欄位名稱。
同時考慮到學號是唯一的,所以,我們將學號設置為索引,方便不同表格之間的合併。
所以,合併後,需要去掉學號的索引。然後進行成績的累加。
total_pd = total_pd.reset_index()total_pd['總分'] = total_pd['語文成績']+total_pd['數學成績']注意:這裡未考慮某門課程請假的情況,如果要考慮某門課請假的情況,可以在上面分數處理的時候,遇到請假的學科,將分數設為0。否則,總分會比其他人少幾分。
如果有其他成績可在上面代碼後繼續進行累加。
對總分進行排序
總分得出後,我們需要根據總分,按照年級進行排序,目前是同分數的排序一致,後續的會跨過同分數的排序數。
比如:
200分有5人,則這5人都排序序號為1,第二檔的為199分,則從序號6開始排。
# 根據總分,按照年級進行排序total_pd['年級排名'] = total_pd.groupby(['年級'], axis=0)['總分'].rank(method='min', ascending=False)print(total_pd.head())為了後續擴展更簡單,我們最後對原有代碼進行了規整。index_finally = ['年級', '班級', '學號', '姓名', '語文成績', '數學成績', '總分', '年級排名']total_pd = total_pd[index_finally]total_pd = total_pd.style.applymap(col_color, subset=['語文成績','數學成績'])total_pd.to_excel('成績\匯總\成績匯總.xlsx', index=False)好了,本節就到這裡,大家可以考慮一下如何進行按班級排序。這個會在下一節進行講解。提供python交流和答疑群:
加入本群要求是關注過本公眾號的同學,如果發現未關注,則會被定期清理,請知悉。
群基本的公約:
1、不要發廣告和討論與python編程無關的內容,否則會被請出群聊;
2、群主不會特意加群裡人的微信,請大家謹慎添加;
3、如果需要特殊的教學和指導,請加本人微信,並註明事由。
4、本群的目的是方便了解大家在學習python過程中的有什麼問題以及其他一些方面的溝通。
請需要的同學掃描下面二維碼入群,注意這個是python學習的群,專門針對非python開發人員學習python。
後臺回覆:python入群
獲取入群碼
覺得有所收穫的話,大家別忘了點讚、轉載和推薦哦!!!!!
大家的關注和點讚是我創作的動力,謝謝了!
共同努力!!