我有一个数据框
val1 val1 distance
100 200 1.5
100 300 5.2
100 234 3.7
200 100 1.6
200 600 4.8
我希望找到每个val1
的前2个距离行。
我&#39,E
val1
获得前2个最小距离行
val1 val2 distance
0 100 200 1.5
2 100 234 3.7
3 200 100 1.6
4 200 600 4.8
这只是一个示例数据集(实际上我有大约1000个唯一的val1) 因此我认为按val1分组并不是一个好主意。
有更快的方法吗?
答案 0 :(得分:3)
我似乎过度分析了您的问题,但简单的sort_values
,后跟groupby
+ head
应该可以满足您的需求。
df.sort_values(['val1', 'distance']).groupby('val1').head(2)
val1 val2 distance
0 100 200 1.5
2 100 234 3.7
3 200 100 1.6
4 200 600 4.8
如果您需要2个以上,只需将参数更改为head
即可。另外,例如,如果您调用head(2)
并且只有一行,则返回该行(没有任何问题)。