Сгруппируйте и найдите лучшие 10% записей на группу в Pandas DataFrame - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь создать новый DataFrame, содержащий 10% лучших записей в группе.

Пример исходного df выглядит следующим образом:

date        name       count
2014-12-14  Jerry      1
2014-12-21  Jerry      2
2015-01-11  Jerry      3
2015-02-01  Jerry      4
2015-02-08  Jerry      5
2015-03-01  Jerry      6
2015-03-08  Jerry      7
2015-03-15  Jerry      8
2015-03-22  Jerry      9
2015-04-26  Jerry      10
2014-12-14  Tom        1
2014-12-21  Tom        2
2015-01-11  Tom        3
2015-02-01  Tom        4
2015-02-08  Tom        5
2015-03-01  Tom        6
2015-03-08  Tom        7
2015-03-15  Tom        8
2015-03-22  Tom        9
2015-04-26  Tom        10

Приведенный выше DataFrame - это просто фрагмент полного DataFrame, который содержит многочисленные имена и содержит еженедельную count информацию для каждого имени в течение болеегодовой период.

Требуемый вывод, который мне нужен, следующий:

date        name       count
2015-04-26  Jerry      10
2015-04-26  Tom        10

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 20 февраля 2019

Сначала sort_values, а затем groupby с пользовательской лямбда-функцией для получения 10% по строкам для групп:

df1 = (df.sort_values(['name','count'], ascending=[True, False])
         .groupby('name', group_keys=False)
         .apply(lambda x: x.head(int(len(x) / 10))))
print (df1)
          date   name  count
9   2015-04-26  Jerry     10
19  2015-04-26    Tom     10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...