提问者:小点点

使用pandas数据框架按作物对国家进行排名


我的数据帧如下所示:

,Area,Item,Year,Unit,Value

524473,Ecuador,Sesame,2018,tonnes,16.0
524602,Ecuador,Sorghum,2018,tonnes,14988.0
524776,Ecuador,Soybeans,2018,tonnes,25504.0
524907,Ecuador,Spices nes,2018,tonnes,746.0
525021,Ecuador,Strawberries,2018,tonnes,1450.0
525195,Ecuador,Sugar beet,2018,tonnes,4636.0
525369,Ecuador,Sugar cane,2018,tonnes,7502251.0
...
1075710,Mexico,Tomatoes,2018,tonnes,4559375.0
1075865,Mexico,Triticale,2018,tonnes,25403.0
1076039,Mexico,Vanilla,2018,tonnes,495.0
1076213,Mexico,"Vegetables, fresh nes",2018,tonnes,901706.0
1076315,Mexico,"Vegetables, leguminous nes",2018,tonnes,75232.0
1076469,Mexico,Vetches,2018,tonnes,93966.0
1076643,Mexico,"Walnuts, with shell",2018,tonnes,159535.0
1076817,Mexico,Watermelons,2018,tonnes,1472459.0
1076991,Mexico,Wheat,2018,tonnes,2943445.0
1077134,Mexico,Yautia (cocoyam),2018,tonnes,38330.0
1077308,Mexico,Cereals (Rice Milled Eqv),2018,tonnes,35974485.0

数据框架中包含了世界上所有的国家和所有的农产品。 那就是我想要做的:

>

  • 选择国家,例如法国。

    找出法国在世界上某一作物产量排名中的位置。

    以及所有的农作物。

    法国的燕麦产量居世界第一位。

    cucumber产量居世界第二位。

    法国的黑麦产量居世界第二位。

    法国排名。。。。 如果法国生产,则对每种产品以此类推。

    我一开始

    df = df.loc[df.groupby('Item')['Value'].idxmax()]
    

    但我不仅要第一,还要第二,第三,第四。。。。 请帮帮我。

    我对熊猫很陌生。


  • 共2个答案

    匿名用户

    使用rank检查

    s = df.groupby('Item')['Value'].rank(ascending = False)
    

    然后

    d = { x : y  for x , y in df.groupby(s)}
    
    d[1] # output put rank one
    

    匿名用户

    您可以指定排名列:

    df['rank'] = df.groupby('Item')['Value'].rank(ascending=False)
    

    然后提取国家/地区的信息:

    df[df['Area']=='France']