Фильтрация максимального количества 3 с использованием группового в пандах - PullRequest
0 голосов
/ 14 ноября 2018

Я работаю с фреймом данных, который содержит 20К строк.Я создал образец фрейма данных, как показано ниже, для репликации фрейма данных.

df = pd.DataFrame()
df ['Team'] = ['A1','A1','A1','A2','A2','A2','B1','B1','B1','B2','B2','B2']
df ['Competition'] = ['L1','L1','L1','L1','L1','L1','L2','L2','L2','L2','L2','L2']
df ['Score_count'] = [2,1,3,4,7,8,1,5,8,5,7,1]

Я хотел бы сохранить строки, в которых используются два максимальных значения Score_count с помощью groupby(['Competition','Team'])

.сохранить строки с максимальным Score_count, используя transform (max), следующим образом:

idx = df.groupby(['Competition','Team'])['Score_count'].transform(max) == df['Score_count']
df = df[idx]

Но я хотел сохранить максимальное количество n чисел (в данном случае это два максимальных значения) Score_count для одного и того жеgroupby.

Как я могу это сделать?

Ниже приведен мой ожидаемый результат:

       Team     Competition  Score_count
0       A1          L1             3
1       A1          L1             2
2       A2          L1             8
3       A2          L1             7
4       B1          L2             8
5       B1          L2             5
6       B2          L2             7
7       B2          L2             5

Вы также можете обратиться к рисунку ниже для ожидаемого результата:

enter image description here

Кто-нибудь может посоветовать, как это сделать?Спасибо,

Zep

1 Ответ

0 голосов
/ 14 ноября 2018

groupby Команда и Соревнование , а затем примите два самых больших значения с .nlargest:

df.groupby(['Team', 'Competition']).Score_count.nlargest(2).reset_index([0,1])

#   Team Competition  Score_count
#2    A1          L1            3
#0    A1          L1            2
#5    A2          L1            8
#4    A2          L1            7
#8    B1          L2            8
#7    B1          L2            5
#10   B2          L2            7
#9    B2          L2            5

Чтобы сбросить исходный индекс:

df.groupby(['Team', 'Competition']).Score_count.nlargest(2).reset_index([0,1]).reset_index(drop=True)

#  Team Competition  Score_count
#0   A1          L1            3
#1   A1          L1            2
#2   A2          L1            8
#3   A2          L1            7
#4   B1          L2            8
#5   B1          L2            5
#6   B2          L2            7
#7   B2          L2            5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...