看板 Python 關於我們 聯絡資訊
大家好,我是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
abc2090614: pd.DataFrame 作 groupby以後會變 06/14 10:33
abc2090614: pandas.core.groupby.DataFrameGroupBy 06/14 10:33
abc2090614: 雖然兩個都有method都叫 .apply但意思不一樣 06/14 10:33
abc2090614: groupby的 .apply是對group作 dataframe是對row或col 06/14 10:34
abc2090614: 可以看看說明的這兩個物件 06/14 10:35
abc2090614: pandas.core.groupby.GroupBy.apply 06/14 10:35
abc2090614: 和 pandas.DataFrame.apply 06/14 10:35
e9904567: 感謝詳盡的分享!:) 06/15 09:41