我有一个像这样的ndarray:
data = [(1,"YES", 54.234),
(1,"YES", 1.0001),
(2,"YES", 4.234),
(3,"YES", 0.234)]
dtypes = [("GROUPID", np.int),
("HASNEAR", "|S255"),
("DISTANCE", np.float64)]
array = np.array(data, dtype=dtypes)
有没有办法对数据进行分组并仅返回新数组中每组中的最小距离?
在我的例子中,我有4行 . 在组和返回最小值之后,我预计只返回3行 . 每个GROUPID值一个 .
如果numpy数组不是正确的工具,你能在Pandas中做到这一点吗?
谢谢
3 回答
创建一个pandas DataFrame,按GROUPID分组并按
min()
聚合:如其他人所说,你可以在熊猫中做到这一点,但它是一个相对重量级的抽象,它引入了你可能会或可能不会感兴趣的各种其他复杂性 .
numpy_indexed包专门用于隔离这类操作:
IIUC你可以在熊猫中做到这一点:
您现在可以在GROUPID列上
groupby
,调用idxmin
以返回感兴趣的列的最小值的索引,并使用它来过滤orig df:你可以看到
idxmin
返回的是最小值的索引:您可以通过调用
.values
将其转换回numpy数组: