摘要:昨天晚上,筆者有幸參加了一場面試,有一個環(huán)節(jié)就是現(xiàn)場編程題目如下示例數(shù)據(jù)如下,求每名學生對應的成績最高的那門科目與,用實現(xiàn)這個題目看上去很簡單,其實,并不簡單。
??昨天晚上,筆者有幸參加了一場面試,有一個環(huán)節(jié)就是現(xiàn)場編程!題目如下:
??示例數(shù)據(jù)如下,求每名學生(ID)對應的成績(score)最高的那門科目(class)與ID,用Python實現(xiàn):
這個題目看上去很簡單,其實,并不簡單。即要求輸出形式如下:
??當然,我們一開始能先到的是利用Pandas中的groupby,按ID做groupby,按score取最大值,可是之后的過程就難辦了,是將得到的結(jié)果與原表做join,還是再想其他辦法?
??怎么辦?答案就是Pandas中g(shù)roupby的官方文檔說明,網(wǎng)址為:http://pandas.pydata.org/pand...。 截圖如下:
本文將會用到其中的三個函數(shù): idxmax(), idxmin(), rank().
??其實,讓我們來解決一開始提出的問題,Python代碼如下:
import pandas as pd df = pd.read_csv("E://score.csv") new_df = df.groupby("ID")["score"].idxmax() for i in new_df: print(df.iloc[i, :].tolist()[0:2])
分析代碼,df.groupby("ID")["score"].idxmax()是對原數(shù)據(jù)按ID做groupby,然后取score列,用idxmax()取出成績最好的行。然后取出這些行即可。
??當然,上述代碼存在兩個衍生問題:
每名學生(ID)對應的成績(score)最低的那門科目(class)與ID;
若有學生他的某些科目的成績是一樣的,求每名學生對應的成績最高的那些科目與ID。
??第一個問題,很好解決,在原先的代碼中,將idxmax()替換為idxmin()即可,輸出的結(jié)果如下:
[1, "C"] [2, "A"] [3, "C"] [4, "A"]
??第二個問題,如果有學生他的某些科目的成績是一樣的,如下面的示例數(shù)據(jù):
在上面數(shù)據(jù)中,第1,3名學生的最高成績存在重復。這是,我們需要用到rank()函數(shù),Python代碼如下:
import pandas as pd import numpy as np df = pd.read_csv("E://score.csv") df["rank"] = df.groupby("ID")["score"].rank(method="min", ascending=False).astype(np.int64) #print(df) print(df[df["rank"] == 1][["ID", "class"]])
輸出結(jié)果如下:
ID class 0 1 A 1 1 B 5 2 C 7 3 B 8 3 C 11 4 C
可以看到,我們得到的df這個數(shù)據(jù)框添加了一列rank,就是每名學生的科目的成績排名,得到的df如下:
ID class score rank 0 1 A 90 1 1 1 B 90 1 2 1 C 70 3 3 2 A 60 3 4 2 B 80 2 5 2 C 100 1 6 3 A 90 3 7 3 B 100 1 8 3 C 100 1 9 4 A 70 3 10 4 B 80 2 11 4 C 90 1
然后按需要取出數(shù)據(jù)即可。
??本次分享到此結(jié)束,歡迎大家交流~~
注意:本人現(xiàn)已開通微信公眾號: Python爬蟲與算法(微信號為:easy_web_scrape), 歡迎大家關(guān)注哦~~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/42637.html
?作者主頁:小小明-代碼實體 ?簡介:Python領(lǐng)域優(yōu)質(zhì)創(chuàng)作者?、數(shù)據(jù)處理專家? ?歡迎點贊 ? 收藏 ?留言 ? 昨晚有位童鞋一道Pandas面試題完全沒有思路不會做,通過黃同學找到我時,這道題目離提交答案僅剩20分鐘,不過我最終還是在15分鐘之內(nèi)解決了問題,這整個過程簡直是刺激~??? 原題題目如下: 最終要求輸出: 要在20分鐘內(nèi)解決這個問題,對于我來說最困難的第一步就是理解...
摘要:最后使用聚合函數(shù),就得到了結(jié)果。從實現(xiàn)上看,返回的是一個結(jié)構(gòu),這個結(jié)構(gòu)必須調(diào)用聚合函數(shù)如之后,才會得到結(jié)構(gòu)為的數(shù)據(jù)結(jié)果。 介紹 每隔一段時間我都會去學習、回顧一下python中的新函數(shù)、新操作。這對于你后面的工作是有一定好處的。本文重點介紹了pandas中g(shù)roupby、Grouper和agg函數(shù)的使用。這2個函數(shù)作用類似,都是對數(shù)據(jù)集中的一類屬性進行聚合操作,比如統(tǒng)計一個用戶在每個月...
摘要:數(shù)據(jù)規(guī)整化清理轉(zhuǎn)換合并重塑數(shù)據(jù)聚合與分組運算數(shù)據(jù)規(guī)整化清理轉(zhuǎn)換合并重塑合并數(shù)據(jù)集可根據(jù)一個或多個鍵將不同中的行鏈接起來。函數(shù)根據(jù)樣本分位數(shù)對數(shù)據(jù)進行面元劃分。字典或,給出待分組軸上的值與分組名之間的對應關(guān)系。 本篇內(nèi)容為整理《利用Python進行數(shù)據(jù)分析》,博主使用代碼為 Python3,部分內(nèi)容和書本有出入。 在前幾篇中我們介紹了 NumPy、pandas、matplotlib 三個...
摘要:按照某一列的數(shù)值進行排序后輸出。根據(jù)國籍這一列的屬性進行分組,然后分別計算相同國籍的潛力的平均值。值得注意的是,在分組函數(shù)后面使用一個函數(shù)可以返回帶有分組大小的結(jié)果。 這篇文章中使用的數(shù)據(jù)集是一個足球球員各項技能及其身價的csv表,包含了60多個字段。數(shù)據(jù)集下載鏈接:數(shù)據(jù)集 1、DataFrame.info() 這個函數(shù)可以輸出讀入表格的一些具體信息。這對于加快數(shù)據(jù)預處理非常有幫助。 ...
閱讀 1128·2021-09-13 10:29
閱讀 3446·2019-08-29 18:31
閱讀 2715·2019-08-29 11:15
閱讀 3070·2019-08-26 13:25
閱讀 1451·2019-08-26 12:00
閱讀 2468·2019-08-26 11:41
閱讀 3555·2019-08-26 10:31
閱讀 1556·2019-08-26 10:25