Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除熊猫中满足一定条件的某些行_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何删除熊猫中满足一定条件的某些行

Python 如何删除熊猫中满足一定条件的某些行,python,pandas,dataframe,Python,Pandas,Dataframe,我使用的是熊猫,数据集如下所示: ID-cell TOWNS NumberOfCrimes 1 Paris 444 1 Berlin 333 1 London 111 2 Paris 222 2 London 555 2 Berlin 3 3 Paris

我使用的是熊猫,数据集如下所示:

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

        . . .
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
这是一个非常大的数据集。我需要为每个城市保留5行,其中犯罪率最高,其余的要删除

因此,我的输出应该如下所示:

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

        . . .
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
我真的很感谢你的帮助。我是新来的。我正在为教员们做一个项目,我的截止日期很快就要到了

sort+groupby.head 您可以按
NumberOfCrimes
降序排序,然后使用
groupby
+
head
。下面是一个示例,您的数据提取了各个城镇中犯罪率最高的单个数字

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)
,等等

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

我喜欢这个解决方案,因为它更适合只保留最上面的一个。非常感谢2.:)我能接受两个正确答案吗?@Neven,当然,没问题。注:如果你只需要最上面的一个,温的解决方案会更好。这个更具可扩展性。您的解决方案更好地满足了我的需要,但他的解决方案也很好。:)