在pandas数据框中选择具有最高分数的行

时间:2015-10-13 15:20:45

标签: python pandas dataframe

我有一个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

我想选择每个“名字”中得分最高的前两名候选人。我怎么能这样做?

2 个答案:

答案 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