2017-10-13 38 views
0

幾個操作後,分組通過我與州,縣和人口的統計數據框與下面列:Python的數據框中:如何繼續對數據幀

SUMLEV REGION DIVISION STATE COUNTY STNAME CTYNAME CENSUS2010POP 

並與下面的線,我的分組數據幀和排序每個狀態的全縣人口

sorted_df = temp_df.groupby(['STNAME']).apply(lambda x: x.sort_values(['CENSUS2010POP'], ascending = False))

排序後,我想只保留3個最大的縣人口明智

largestcty = sorted_df.groupby(['STNAME'])["CENSUS2010POP"].nlargest(3) 

而且作爲下一步我想那裏的值相加witrh下面的命令

top3sum = largestcty.groupby(['STNAME']).sum() 

但現在的問題是關鍵「STNAME」是不是在GROUP BY後的系列。我的問題是如何保留系列中原始DataFrame的按鍵?

因此應用的答案後,我有top3sum作爲一個數據幀

top3sum = pd.DataFrame(largestcty.groupby(['STNAME'])'STNAME','CENSUS2010POP'].sum(),columns =['CENSUS2010POP'])
top3sum[:8]

>>> STNAME CENSUS2010POP
Alabama 1406269 Alaska 478402 Arizona 5173150 Arkansas 807152 California 15924150 Colorado 1794424 Connecticut 2673320 Delaware 897934

這是top3sum數據看起來怎麼樣,然後我得到:
cnty = top3sum['CENSUS2010POP'].idxmax()

cnty = California 但後來試圖用我收到一個關鍵錯誤

+0

請出示你的樣本數據意味着什麼。自您彙總後,您將無法保留原始指數。你在尋找'reset_index()'? – Parfait

+0

我使用了reset_index(),我明白聚合後索引消失了,但我的問題是如何基於新數據框中的舊鍵重新創建索引。 –

+0

本來有助於查看原始數據和預期結果。不知道你的意思是*鍵*。 – Parfait

回答

0

您的問題是,在第二個分組後,您只能選擇CENSUSxxx列並選取三個最大值。

請注意,在應用nlargest之前,您不需要預先排序,所以第一個命令是不必要的。但是,如果你排序,你可以很容易地選擇第3行排序分組dataframes的:

largestcty = temp_df.groupby(['TNAME']).apply(lambda x: x.sort_values(['CENSUS2010POP'], ascending = False).head(3) 

然後你需要爲採用的總和命令來選擇需要的列:

top3sum = largestcty.groupby(['STNAME'])['CENSUS2010POP'].sum() 
+0

感謝您的快速回答。這非常有幫助。但是,如果我只選擇了'CENSUS2010POP'這個列,爲什麼我仍然擁有'largestcty'系列中的州名,但是他們不再可以作爲關鍵字訪問? –

+0

我還有一個問題,就是如何在創建的系列組合後應用'.sum()''top3sum'仍然有'['STNAME']'作爲關鍵字。 –