当有多个组时选择n个最大值

时间:2018-09-05 07:39:20

标签: pandas

test= pd.DataFrame({'Year':['2016','2016','2016','2017','2017','2017']
                    ,'Country' : ['NL','GR','AU','NL','GB','BR']
                    ,'Count' : ['100','200','5','1000','2000','3']}) 
df;

    Year    Country Count
0   2016    NL      100
1   2016    GR      200
2   2016    AU      5
3   2017    NL      1000
4   2017    GB      2000
5   2017    BR      3

我想根据“列数”和“年份”选择前2个条目。

例如

    Year  Country   Count
0   2016    NL      100
1   2016    GR      200
3   2017    NL      1000
4   2017    GB      2000

因此,我每年都希望看到前2个国家/地区。有想法吗?

1 个答案:

答案 0 :(得分:0)

首先需要将列Count转换为整数,然后转换sort_values并最后使用GroupBy.tailGroupBy.head

test['Count'] = test['Count'].astype(int)
df = test.sort_values(['Year','Count']).groupby('Year').tail(2)
print (df)
   Year Country  Count
0  2016      NL    100
1  2016      GR    200
3  2017      NL   1000
4  2017      GB   2000

如果要在count列中更改订单:

test['Count'] = test['Count'].astype(int)
df = test.sort_values(['Year','Count'], ascending=[True, False]).groupby('Year').head(2)
print (df)
   Year Country  Count
1  2016      GR    200
0  2016      NL    100
4  2017      GB   2000
3  2017      NL   1000