2016-06-28 1 views
1

получить список следующим образом:панды получить максимум 3 балла строка для каждой категории

cat score name 
a 80 fa 
c 88 lu 
b 36 li 
b 96 liu 
d 99 zc 
b 76 mi 
d 89 lu 
a 50 fa 
d 69 zhang 
b 36 huang 
d 59 guan 
b 96 ka 
b 86 chao 
c 98 le 
a 50 mi 
a 90 zc 
c 83 chao 
b 66 guan 

Как использовать панда можно получить оценка строк максимума 3 для каждой кошки? показать все три ряда

ответ

4

Вы можете использовать groupby с nlargest:

print (df.groupby('cat')['score'].nlargest(3)) 
cat  
a 15 90 
    0  80 
    7  50 
b 3  96 
    11 96 
    12 86 
c 13 98 
    1  88 
    16 83 
d 4  99 
    6  89 
    8  69 
Name: score, dtype: int64 

Если потребность reset_index и удалить level=1 из Multiindex:

df1 = df.groupby('cat')['score'] 
     .nlargest(3) 
     .reset_index(level=1, drop=True) 
     .reset_index() 

print (df1) 
    cat score 
0 a  90 
1 a  80 
2 a  50 
3 b  96 
4 b  96 
5 b  86 
6 c  98 
7 c  88 
8 c  83 
9 d  99 
10 d  89 
11 d  69 

Редактируйте комментарий:

Перед groupbyset_index из колонки name:

df1 = df.set_index('name').groupby('cat')['score'].nlargest(3).reset_index() 
print (df1) 
    cat name score 
0 a  zc  90 
1 a  fa  80 
2 a  fa  50 
3 b liu  96 
4 b  ka  96 
5 b chao  86 
6 c  le  98 
7 c  lu  88 
8 c chao  83 
9 d  zc  99 
10 d  lu  89 
11 d zhang  69 

EDIT1 по comment1:

Если score столбец устанавливается в 0, попробуйте добавить параметр name='score' в reset_index()

df1 = df.set_index('name').groupby('cat')['score'].nlargest(3).reset_index(name='score') 

Другим решением является rename:

df1 = df.set_index('name') 
     .groupby('cat')['score'] 
     .nlargest(3) 
     .reset_index() 
     .rename(columns={'0':'score'}) 

я f имеют несколько столбцов, добавьте их в set_index:

df1 = df.set_index(['name', 'name1', 'name2']) 
     .groupby('cat')['score'] 
     .nlargest(3) 
     .reset_index(name='score') 
+0

спасибо, можем ли мы показать его как поле данных? –

+0

см. Редактирование, я добавляю вывод в 'df1' – jezrael

+0

спасибо, я попробовал, но« оценка »показала« 0 », что случилось? –