Извлечение MultiIndex из групповых панд - PullRequest
0 голосов
/ 27 ноября 2018

Какой эффективный способ извлечь второй индекс после groupby по отношению к максимальному количеству клиентов в группе.

Предполагается датафрейм df с различными штатами и 10 сотрудниками (имена от Officer 1 до Officer 10)) в каждом штате.Столбец Current Status всегда будет иметь значение Customer:

    State List  Sales Officer   Current Status
0   UP          Officer 4       Customer
1   MH          Officer 5       Customer
2   AP          Officer 6       Customer
3   AN          Officer 2       Customer
4   GJ          Officer 3       Customer
.... so on

Ожидаемый результат состоит из менеджера по продажам с наибольшим числом клиентов в каждом штате:

State List     Sales Officer      
AN             Officer 6          403
AP             Officer 1          266
               Officer 8          266
... and so on

Пока ямы выполнили следующее:

df.groupby(['State List', 'Sales Officer'])['Current Status'].count()#.reset_index()

и дали мне следующее:

State List  Sales Officer
AN          Officer 1        376
            Officer 10       401
            Officer 2        353
            Officer 3        373
            Officer 4        375
            Officer 5        382
            Officer 6        403
            Officer 7        400
            Officer 8        385
            Officer 9        378
AP          Officer 1        266
            Officer 10       228
            Officer 2        240
            Officer 3        248
            Officer 4        235
            Officer 5        229
            Officer 6        242
            Officer 7        238
            Officer 8        266
            Officer 9        243

Теперь я застрял в извлечении Sales Officer против каждого State List с максимальным количеством клиентов,Любые идеи!

1 Ответ

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

Используйте boolean indexing с transform из max для возврата Series с тем же размером, что и оригинал:

s = df.groupby(['State List', 'Sales Officer'])['Current Status'].count()
df = s[s == s.groupby('State List').transform('max')]
print (df)
State List  Sales Officer
AN          Officer 6        403
AP          Officer 1        266
            Officer 8        266
Name: a, dtype: int64

Деталь :

print (s.groupby('State List').transform('max'))
State List  Sales Officer
AN          Officer 1        403
            Officer 10       403
            Officer 2        403
            Officer 3        403
            Officer 4        403
            Officer 5        403
            Officer 6        403
            Officer 7        403
            Officer 8        403
            Officer 9        403
AP          Officer 1        266
            Officer 10       266
            Officer 2        266
            Officer 3        266
            Officer 4        266
            Officer 5        266
            Officer 6        266
            Officer 7        266
            Officer 8        266
            Officer 9        266
Name: a, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...