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