我有以下数据帧(实际上是几百MB长):

    X   Y   Size
0   10  20  5
1   11  21  2
2   9   35  1
3   8   7   7
4   9   19  2


我要舍弃与数据框中的任何其他X,Y点具有欧几里德距离的X, Y点,且该点小于delta=3。在那种情况下,我只想保留较大的行。

在此示例中,预期结果将是:

    X   Y   Size
0   10  20  5
2   9   35  1
3   8   7   7

最佳答案

正如问题所指出的那样,所需算法的行为尚不清楚如何处理距离链。

如果允许链接,则一种解决方案是使用基于密度的聚类算法(例如DBSCAN)对数据集进行聚类。

您只需要将邻域半径eps设置为delta,并将min_sample参数设置为1,即可将孤立的点作为群集。然后,您可以在每个组中找到最大尺寸的点。

from sklearn.cluster import DBSCAN
X = df[['X', 'Y']]
db = DBSCAN(eps=3, min_samples=1).fit(X)
df['grp'] = db.labels_
df_new = df.loc[df.groupby('grp').idxmax()['Size']]
print(df_new)

>>>
    X   Y  Size  grp
0  10  20     5    0
2   9  35     1    1
3   8   7     7    2

关于python - 丢弃数据框中X,Y坐标彼此接近的点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55871633/

10-14 19:34
查看更多