作者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://webptt.com/cn.aspx?n=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
1F:→ abc2090614: pd.DataFrame 作 groupby以後会变 06/14 10:33
2F:→ abc2090614: pandas.core.groupby.DataFrameGroupBy 06/14 10:33
3F:→ abc2090614: 虽然两个都有method都叫 .apply但意思不一样 06/14 10:33
4F:→ abc2090614: groupby的 .apply是对group作 dataframe是对row或col 06/14 10:34
5F:→ abc2090614: 可以看看说明的这两个物件 06/14 10:35
6F:→ abc2090614: pandas.core.groupby.GroupBy.apply 06/14 10:35
7F:→ abc2090614: 和 pandas.DataFrame.apply 06/14 10:35
8F:→ e9904567: 感谢详尽的分享!:) 06/15 09:41