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

时间:2018-07-02 22:15:29

标签: 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       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 :(得分:3)

sort + groupby.head

您可以按NumberOfCrimes降序排序,然后使用groupby + head。这是一个示例,其中您的数据按Town提取了单个最高的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)等。

答案 1 :(得分:2)

使用

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