Лучшие N записей панд в каждой группе, отсортированные по значению столбца - PullRequest
0 голосов
/ 19 декабря 2018
import pandas as pd
d = {
    'resource': [1,2,3,4,5,6,7], 
    'branch': ['a', 'b', 'c', 'a', 'a', 'c', 'b'],
    'utilization': [0.7, 0.76, 0.9, 0.3, 0.55, 0.87, 0.71]
}
df = pd.DataFrame(data=d)

Мне нужно отобразить 2 использованных ресурса по отраслям

Примерно так:

df.groupby('branch')[['resource', 'utilization']].nlargest(2, 'utilization')

Я попробовал следующее:

f = lambda x: x.sort_values('utilization', ascending=False)
df.groupby('branch', sort=False).apply(f).nlargest(3, 'utilization')

но это дает мне топ-3 по всем записям, когда мне нужно топ-N в каждой группе

        resource    branch  utilization
branch              
c   2          3         c  0.90
    5          6         c  0.87
b   1          2         b  0.76

1 Ответ

0 голосов
/ 19 декабря 2018

Может использовать sort_values + tail

df.sort_values('utilization').groupby('branch').tail(2)
  branch  resource  utilization
4      a         5         0.55
0      a         1         0.70
6      b         7         0.71
1      b         2         0.76
5      c         6         0.87
2      c         3         0.90
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...