2016-05-03 43 views
1

我有一个小样本,看起来像这样一个数据帧:子集叠熊猫据帧

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 

完整的数据帧是在这里:https://www.dropbox.com/s/b413htrn39m2wzg/zzzzz.csv?dl=0

我想根据总和来选择前10个国家mean_area(完整的数据帧有近200个国家),并选择前5作物为每个国家(再一次基于mean_area)

我可以根据mean_area的前10个国家如下:

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

然后,我如何将它转换为每个国家只有前5位作物的数据框。

回答

1

以平均面积总计获得排名前10位的国家。

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

子集的基础上,前10名。

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

数据框获得前10名的国家总数(在最后一步排序)。

​​

按国家排序按国家降序排列,团体前10名,然后通过mean_area并采取五大使用head(5),然后用国家的总访问降序排列(即最大第一)对结果进行排序和每件商品的平均价格。

>>> (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 
...