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

作者: e9904567 (晶仔)   2018-06-13 22:31:19
大家好,我是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在這,再麻煩告知,我會把文刪掉,感謝大家~
作者: abc2090614 (casperxdd)   2018-06-14 10:33:00
pd.DataFrame 作 groupby以後會變pandas.core.groupby.DataFrameGroupBy雖然兩個都有method都叫 .apply但意思不一樣groupby的 .apply是對group作 dataframe是對row或col可以看看說明的這兩個物件pandas.core.groupby.GroupBy.apply和 pandas.DataFrame.apply
作者: e9904567 (晶仔)   2018-06-15 09:41:00
感謝詳盡的分享!:)

Links booklink

Contact Us: admin [ a t ] ucptt.com