我正在使用 Pandas ,并且我有如下所示的数据集:

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

我真的很感谢你的帮助。我是新手。我正在为 Faculty 做一些项目,我的截止日期非常接近。 :/

最佳答案

排序 + 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) 等。

关于python - 如何删除满足某些条件的 Pandas 中的某些行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51144340/

10-15 02:04