大家好,我是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在这,再麻烦告知,我会把文删掉,感谢大家~