[问题] [Pandas] 转成pivot后选出最大最小值

楼主: e9904567 (晶仔)   2018-06-18 17:03:28
大家好~ 我又来请教pandas的相关问题,题目一样来自coursera introduction to Data Science in Python的第二周作业
题目:哪个county在 2010-2015 期间人口改变量量的绝对值最高?
我的想法:
1)将state从county list中去除
2)制作一个pivot table,以county为栏,并以2010-2015的人数为值
3)对每栏(每个county) filter 出最大值及最小值,并相减
4)回传差异最大的城市
以下是我的code:
census_df = pd.read_csv('https://storage.googleapis.com/py_ml_datasets/census.csv')
def answer_three():
city_name = census_df["CTYNAME"].unique()
state_name = census_df["STNAME"].unique()
rest = list(set(city_name)^set(state_name))
city_filter = census_df[census_df["SUMLEV"]==50]
city_pivot = city_filter.pivot_table(columns = ["CTYNAME"], values = ["POPESTIMATE2010","POPESTIMATE2011","POPESTIMATE2012", "POPESTIMATE2013", "POPESTIMATE2014", "POPESTIMATE2015"] )
find_diff = city_pivot[rest].max() - city_pivot[rest].min()
return find_diff.idxmax()
answer_three()
得出的答案是错的(Los Angeles County,其为差异第二大的county)
答案是Haris County
我的问题是:
针对DataFrame做pivot table后,对每个字段(county)filter 出最大最小值时,
有极少部分的county的最大最小值会被“未知的数字给覆蓋掉”
pivot table的type仍为DataFrame,但到filter最大最小值时type已转变为Series
(我猜只是二维变一维的关系)
想请教:
对pivot table做filter最大最小值时,如何避免数字跑掉的问题?
(我确定pivot table抓的数字是对的,但到filter阶段会有极少部分的数字是错的)
感谢大家耐心地看完 :)
作者: iphone2003 (307)   2018-06-19 07:41:00
我没有很确定你要做的事情 所以有错请见谅里面像是Harris County,它同时对应了两个STNAME分别是乔治亚州和德州,所以同一个Harris County是有两种资料的然后pivot_table它不是只是单纯把资料整理得比较好看而已,而是会做类似groupby的聚合运算。而pivot_table默认的函数计算是平均值因此实际上乔治亚州的Harris County的差异只有1224,德州的有42万,然后在pivot_table默认的平均计算下,就让'Harris County'这个地点对应的数值变成1224和42万的平均,因此最后的结果剩下21万而已

Links booklink

Contact Us: admin [ a t ] ucptt.com