我有以下数据帧(实际上是几百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/