2016-05-03 12 views
1

Ich habe einen Datenrahmen mit einer kleinen Probe, die wie folgt aussieht:Subsetting gestapelt Pandas Datenrahmen

Country Item            mean_area 
84 Albania Sunflower seed         1900 
85 Albania Tangerines, mandarins, clementines, satsumas  0 
86 Albania Tobacco, unmanufactured       5700 
87 Albania Tomatoes           5400 
88 Albania Vegetables, freshnes        0 
89 Albania Vegetables, leguminousnes       20 
90 Albania Vetches           6200 
91 Albania Watermelons          8300 
92 Algeria Wheat            112000 
93 Algeria Almonds, with shell        27150 

Der vollständige Datenrahmen ist hier: https://www.dropbox.com/s/b413htrn39m2wzg/zzzzz.csv?dl=0

ich die Top 10 der Länder, basierend auf Summe auswählen möchten von mean_area (die vollständige Datenrahmen hat fast 200 Ländern), und wählen Sie die Top-5-Kulturen für jedes Land (wiederum bezogen auf mean_area)

ich die Top-10-Länder erhalten auf mean_area wie folgt auf:

df = (df_stacked 
     .loc[df_stacked['Country'] 
     .isin(df_stacked.groupby('Country') 
     .sum() 
     .nlargest(10, 'mean_area').index)]) 

Wie wandle ich es dann in ein Dataframe mit nur Top 5 Ernten für jedes dieser Länder um.

Antwort

1

Erhalten Sie eine Liste der Top 10 Länder nach Gesamtfläche insgesamt.

top10 = df.groupby('Country_FAO', sort=False).mean_area.sum().nlargest(10).index 

Subset Ihre Datenrahmen basierend auf der Oberseite 10.

df = df[df.Country_FAO.isin(top10)] 

die Top-10-Land Summen Erhalten (für in letzter Schritt Sortierung).

df['country_total'] = df.groupby(['Country_FAO']).mean_area.transform(sum) 

Sortieren Sie die Top 10 nach Land und dann durch mean_area Ordnung, Gruppe nach Land in absteigender und nehmen Sie die Top fünf head(5) verwenden und dann die Ergebnisse sortieren in absteigender Reihenfolge (dh größte zuerst) die Länder Summen mit und mean_area pro Artikel.

>>> (df 
    .sort_values(['Country_FAO', 'mean_area'], ascending=False) 
    .groupby('Country_FAO') 
    .head(5) 
    .sort_values(['country_total', 'mean_area'], ascending=False)) 

    Country_FAO    Item mean_area country_total 
3201  India  Rice, paddy 44712000  177423048 
3218  India   Wheat 27486000  177423048 
3182  India   Millet 13012200  177423048 
3206  India   Sorghum 9856400  177423048 
3204  India  Seed cotton 8576500  177423048 
1440  China  Rice, paddy 29961890  160425183 
1470  China   Wheat 26653290  160425183 
1410  China   Maize 23056270  160425183 
1449  China   Soybeans 9306760  160425183 
1439  China   Rapeseed 7494360  160425183 
7458   USA   Maize 29315744  101345306 
7489   USA   Soybeans 29302790  101345306 
7505   USA   Wheat 21474065  101345306 
7486   USA  Seed cotton 5282000  101345306 
7488   USA   Sorghum 3126630  101345306 
...