[問題] [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