我有一个pandas数据框,如下所示:
Name Candidates Qualifier Score
AAA AAA_1 Yes 0
AAA AAA_2 Yes 10
AAA AAA_3 No 20
BBB BBB_1 No 1
BBB BBB-2 Yes 10
BBB BBB_3 Yes 50
我想选择每个“名字”中得分最高的前两名候选人。我怎么能这样做?
答案 0 :(得分:4)
您可以在“姓名”和“得分”上对df进行排序,然后在“姓名”上对groupby
进行排序,并致电head(2)
以获取每组的前2行:
In [228]:
df.sort(['Name','Score'], ascending=False).groupby('Name').head(2)
Out[228]:
Name Candidates Qualifier Score
5 BBB BBB_3 Yes 50
4 BBB BBB-2 Yes 10
2 AAA AAA_3 No 20
1 AAA AAA_2 Yes 10
答案 1 :(得分:0)
看得见,因为我最终得到了与EdChum answer相同的方法,这是我的贡献,这对评论来说有点长。如果要按顺序打印名称和候选人,可以再使用一个sort
语句。
Sorted = df.sort(['Score'], ascending = False).groupby('Name').head(2)
print Sorted.sort(['Candidate'], ascending = True)
Name Cand Score
1 AAA AAA_2 10
2 AAA AAA_3 20
4 BBB BBB_2 10
5 BBB BBB_3 50