2015-10-13 4 views
4

У меня есть панд dataframe, которая выглядит как:собирания строки в панде dataframe с рекордсменами

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 

Я хочу, чтобы выбрать два верхние кандидат в каждом «Имени», имеющие высокий балл. Как я могу это сделать?

ответ

4

Вы можете отсортировать ФР на «Имя» и «Счет», а затем 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 
+0

@DSM извините, это неправильно? – EdChum

+1

ОП после «двух лучших кандидатов в каждом имени». – DSM

+0

Вопрос задает два первых «кандидата» за каждое имя, имеющее наивысший балл, если я не ошибаюсь. –

0

Хорошо, потому что я закончил тем же методом, что и Edchum's 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 
+0

Это не кажется, обращаются к части «по имени» вопроса. – DSM

+0

@DSM Да, я понял, что после публикации. Я работаю над правильным ответом на данный момент – SirParselot

Смежные вопросы