[問題][pandas]group後對同一欄位做兩次sort

看板Python作者 (晶仔)時間5年前 (2018/06/13 22:31), 5年前編輯推噓0(008)
留言8則, 2人參與, 5年前最新討論串1/1
大家好,我是python的初學者,最近有機會寫到了coursera(introduction to Data Science in python) 第二週作業: 雖然寫的code最後與答案一致,但想了很久還是無法理解某些觀念,因此想在這裡發問 題目是:假如僅考慮每州(state)人口最多的三個郡(county)計算人口總和,哪三個州總和數最多? 我的想法是: 1)先把每個state group起來, 再針對每個state sort出人口數最高的三個county 2)針對每個state 人數最高的三個county加總,並且sort出前三個state總和數最高的 以下是code: census_df = pd.read_csv('https://storage.googleapis.com/py_ml_datasets/census.csv') def answer_two(): state_filter = census_df[census_df["SUMLEV"]==50] grouped = state_filter.groupby("STNAME") city_sorted = grouped.apply(lambda x: x.sort_values(by ="CENSUS2010POP", ascending = False).head(3).sum()) top_3_state = city_sorted.sort_values(by="CENSUS2010POP", ascending = False).head(3) return top_3_state["STNAME"] answer_two() 我的問題是: 1) 在group後如果直接做sort_values會出現 error,必須使用apply才不會有error 2) 然而, 若在group後對同一個欄位做兩次apply也會出現error,也就是說group後必須先使用apply再使用sort_values才不會出現error 關於第二點,stack overflow的說法好像是 dataframe的限制: 不能同時對同一欄位做兩次apply sort? (不是很確定) 想請教:先group後,對同一欄位做兩次sort (必須先apply 再 sort_values) 的原因是? 如果不適合po在這,再麻煩告知,我會把文刪掉,感謝大家~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.110.38 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1528900283.A.114.html ※ 編輯: e9904567 (114.136.110.38), 06/13/2018 22:32:12 ※ 編輯: e9904567 (114.136.110.38), 06/13/2018 22:33:06

06/14 10:33, 5年前 , 1F
pd.DataFrame 作 groupby以後會變
06/14 10:33, 1F

06/14 10:33, 5年前 , 2F
pandas.core.groupby.DataFrameGroupBy
06/14 10:33, 2F

06/14 10:33, 5年前 , 3F
雖然兩個都有method都叫 .apply但意思不一樣
06/14 10:33, 3F

06/14 10:34, 5年前 , 4F
groupby的 .apply是對group作 dataframe是對row或col
06/14 10:34, 4F

06/14 10:35, 5年前 , 5F
可以看看說明的這兩個物件
06/14 10:35, 5F

06/14 10:35, 5年前 , 6F
pandas.core.groupby.GroupBy.apply
06/14 10:35, 6F

06/14 10:35, 5年前 , 7F
和 pandas.DataFrame.apply
06/14 10:35, 7F

06/15 09:41, 5年前 , 8F
感謝詳盡的分享!:)
06/15 09:41, 8F
文章代碼(AID): #1R8Igx4K (Python)