我正在使用熊猫,并且我的数据集看起来像这样:
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
我非常感谢您的帮助。我是新来的。我正在为教职员工开展一些项目,而我的截止日期非常接近。 :/
答案 0 :(得分:3)
您可以按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