Как удалить определенные строки в пандах, которые удовлетворяют некоторому условию - PullRequest
0 голосов
/ 03 июля 2018

Я использую панд, и у меня есть набор данных, который выглядит следующим образом:

ID-cell    TOWNS      NumberOfCrimes
 1          Paris       444
 1          Berlin      333
 1          London      111        
 2          Paris       222
 2          London      555
 2          Berlin      3
 3          Paris       999
 4          Berlin      777
 4          Paris       5
 5          Paris       123
 5          Berlin      8
 6          Paris       1000
 9          Berlin      321
 12         Berlin      1
 12         Berlin      2
 12         Paris       1

        . . .

И это действительно большой набор данных. Мне нужно оставить для каждого города только 5 строк с наибольшим количеством преступлений и остальные из них удалить.

Итак, мой вывод должен выглядеть так:

ID-cell    TOWNS      NumberOfCrimes
 6          Paris       1000
 3          Paris       999     
 1          Paris       444
 2          Paris       222
 5          Paris       123

 4          Berlin      777
 1          Berlin      333
 9          Berlin      321
 5          Berlin      8

 1          London      555        
 2          London      111

Я действительно ценю помощь. Я новичок в этом. И я работаю над каким-то проектом для факультета, и мой срок так близок. : /

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Использование

df.sort_values('NumberOfCrimes').drop_duplicates('ID-cell',keep='last')
Out[404]: 
   ID-cell   TOWNS  NumberOfCrimes
0        1   Paris             444
4        2  London             555
5        3   Paris             999
0 голосов
/ 03 июля 2018

sort + groupby.head

Вы можете отсортировать по NumberOfCrimes по убыванию, а затем использовать groupby + head. Вот пример с вашими данными, извлекающими одно наибольшее NumberOfCrimes по городам.

res = df.sort_values('NumberOfCrimes', ascending=False)\
        .groupby('TOWNS').head(1)

print(res)

   ID-cell   TOWNS  NumberOfCrimes
5        3   Paris             999
4        2  London             555
1        1  Berlin             333

Таким образом, для топ-2 или 3 для каждого города вы можете использовать head(2), head(3) и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...