作者e9904567 (晶仔)
看板Python
標題[問題][pandas]group後對同一欄位做兩次sort
時間Wed Jun 13 22:31:19 2018
大家好,我是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