如何利用python進行總分排名

2021-03-02 浩浩學編程

獲取多科成績

之前我們講了如何取得數學這一科的成績,但是我們要計算總成績的話,就需要獲得其他幾科的成績,一般有語數英等,這裡我們增加一門語文,文檔和命名規則類似。

然後,我們要改造一下我們代碼,使它能自動讀取不同的科目數據。

這個就是所謂的重構,我們將原先讀取數學數據的代碼,改造成一個函數。

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入群

獲取入群碼

覺得有所收穫的話,大家別忘了點讚、轉載和推薦哦!!!!!

大家的關注和點讚是我創作的動力,謝謝了!

共同努力!!

相關焦點

  • 利用Excel對總分進行排名
    學校每次考試後,都需要對學生的成績進行分析,這都離不開計算總分和對學生排名。如果我們使用排序,那麼表中的數據的順序就會變化,如果錄入有誤,修改後,還要重新進行排名,如果實現同成績同名次的學生的排序工作呢?下面就給大家介紹一下利用RANK( )函數,它將為我們解決出現的以上難題。
  • python : 利用 asyncio 進行快速抓取
    有很多方法可以用來進行web數據抓取,然而其中好像並沒有一個最好的辦法。有一些如scrapy這樣十分成熟的框架,更多的則是像mechanize這樣的輕量級庫。DIY自己的解決方案同樣十分流行:你可以使用requests、beautifulsoup或者pyquery來實現。
  • 如何利用並發性加速你的python程序(一):相關概念
    雷鋒網 AI 科技評論按,作為目前最流行的程式語言之一,python 在人工智慧相關的領域備受青睞。在編碼時,代碼的運行時間是我們需要考慮的重要因素之一。如何加快程序運行的速度?這是很多開發者經常會思考的問題。工程師 Jim Anderson 分享了他的經驗,他寫了一篇關於「通過並發性加快 python 程序的速度」的文章。
  • 利用Python對WRFout文件進行簡單繪圖
    這兩個月以來,我熟練掌握了Linux下anaconda的安裝和卸載以及學會了如何心平氣和地接受按下回車後出現的全新的error,謝謝你,WRF!謝謝你,Linux!關於運行環境和編譯器我用的是祖傳的VMware Workstation Pro中的Ubuntu12.04,Linux安裝好可視化界面後還是相對友好的,基礎的需求通過百度就可以解決。
  • python如何進行匯總統計?
    計算統計的過程中,可以按照不同維度進行,比如可以按列計算,也可以按行計算。並且,在進行計算統計時,缺失值的處理又是極為重要且關鍵的。接下來,小編帶領大家一起,學習如何使用python進行匯總統計,以及期間如何處理缺失值。基礎Pandas對象擁有一組常用的數學和統計方法。跟對應的numpy數組方法相比,它們都是基於沒有缺失數據的假設而構建的。
  • REDIS 如何利用python 操作redis 集群 (投稿文章)
    註明: 此篇文章為投稿文字, 投稿人 閆樹爽, (資深程式設計師, 目前從事REDIS ,MONGODB ,以及資料庫運維自動化代碼工作)在NOSQL 資料庫中的操作,與關係型資料庫不同的是,會一門程序對於NOSQL的資料庫操控是十分有利的,下面的內容是關於如何利用
  • 541頁的《利用Python進行數據分析》(附電子書和源碼下載)
    【導讀】《利用Python進行數據分析》原名為:《Python for Data Analysis》2nd Edition。https://www.oreilly.com/library/view/python-for-data/9781491957653/關於這本書本書針對Python 3.6進行了更新,包含實用案例研究,向您展示如何有效地解決大量數據分析問題。
  • 利用python畫出詞雲圖
    本文將介紹如何利用python中相應的模塊畫出詞雲圖。首先給出效果圖:其中詞雲圖中的詞彙是對手機簡訊中的垃圾簡訊的統計,字體越大表示在垃圾簡訊中出現的頻次越高。下面給出具體的步驟。讀取「垃圾簡訊」的csv數據首先給出代碼:其中pandas是一個python常用的數據可視化模塊。pd.read_csv函數是用來讀取csv文件,data.columns是修改文件中的列的名稱。
  • python匯總數據弄懂這個,除了性能,沒有什麼難得倒你了--按條件處理數據
    「 前面幾節我們對總分進行排序,那這一節我們我們來用apply篩選一下滿足條件的數據。
  • python中利用py幫助命令擴展開發知識面
    計算公式:(今天是星期幾+幾天後)%7本節知識視頻教程一、回到python REPLpython REPL簡稱python控制臺。二、如何利用幫助命令解決問題?1、利用dir()函數來獲取當前環境下面有哪些模塊?
  • 利用Python隨機生成100道加法題
    本文我們將利用python實現一個很有意思的功能:隨機生成100道加法題。首先給出效果圖:代碼很簡單:雖然代碼看上去有很多的行,但是核心代碼就是4、5兩行。其中第4行是隨機生成100對整數,並保存為tuple類型,如圖所示:第5行是將兩個隨機整數轉換為加法的形式,如圖所示:其中代碼中的random.randint表示生成隨機整數,下面我們就對random模塊進行詳細介紹。
  • 如何利用socket進行通信?
    前言電腦手機通訊工具都用過,比如QQ,微信等,你可能很好奇,一個手機它是如何準確無誤地把消息發送給另外一個手機的,當然你會說是通過網絡;如果你不斷追問自己為什麼,我相信你一定會陷入困惑,因為困惑你可能會放棄,也可能好奇會想要去知道答案到底是什麼。
  • 零基礎學習python GUI編程(PyQt)系列之6:用pandas操作excel
    通過前面的介紹,我們已經了解了對兩個文本文件如何進行比較,今天我們將其換成excel表格文件,對excel文件中的學生成績進行排名。我們都知道,如果直接使用excel表格中的公式對學生的總成績進行排名的話使用的是RANK公式,例如在相應的表格文件中輸入"=RANK(E2,$E$2:$E$1000)「就可以對E列的第二行到第1000行的數據進行排名了。
  • python實踐:利用爬蟲刷網課
    今天就來講講如何利用爬蟲技術刷網課。實戰:最近學校又推送了一波網課,一個一個的看實在太費時間,於是乎就想到了爬蟲來自動刷網課。第一步分析網站原始碼,看看網站是如何上傳用戶的數據的。好的接下來我們就用python來模擬登陸了。第三步首先在終端下面安裝一下requests。
  • 利用python解決凸優化問題
    用數學公式對其進行定義就是,給定一個數據的集合C,x,y∈C,0≤θ≤1,如果數據集滿足條件:θx+(1θy)∈C,那麼C就是凸集。用圖形表示:圖中,左側為凸集,右側非凸集。如何判斷一個函數是凸函數第一種判斷方式是利用一階導數,當函數滿足條件:用圖形表示為:這是函數一定為凸函數。
  • 【Python教程】用Python進行數據可視化
    在本文中,我將介紹如何開始使用Python和matplotlib、seaborn兩個庫對數據進行可視化。pycharm社區版本)Python 3.6.9(windows如何安裝python環境)pip3 9.0.1Matplotlib 3.3.3:基於Python的繪圖庫,提供完全的 2D 支持和部分 3D 圖像支持。
  • 「Python替代Excel Vba」系列(二):pandas分組統計與操作Excel
    帶你用pandas玩轉各種數據處理前言在本系列的上一章已經介紹了如何讀寫 excel 數據,並快速進行匯總處理。但有些小夥伴看完之後有些疑惑:那只是簡單讀寫數據而已,有時候需要設置 excel 的格式。
  • 利用python操作Excel教程
    很多人都會使用excel來對數據做處理,但隨著python的日益強盛,不甘落後的我們也可以用python來完成這些工作,該教程目的是教會您用Python腳本來對excel做處理。翻譯:Annereference:https://pandas-xlsxwriter-charts.readthedocs.io推薦閱讀:python 數據清洗篇Python
  • Python大佬簡簡單單利用字典破解zip文件口令
    前幾天在一本書上看到一篇可以利用字典破解zip文件密碼的文章,覺得比較有意思於是研究了一番,在這裡分享一下很多人學習
  • 如何利用python實現生命遊戲
    英國數學家約翰·何頓·康威在1970年發明了 the game of life,今天番茄加速就來分享下如何利用python實現生命遊戲,規則如下:每個細胞有兩種狀態 - 存活或死亡每個細胞與以自身為中心的周圍八格細胞產生互動當前細胞為存活狀態時