首页 > 解决方案 > 在不循环的情况下比较两个数据帧之间的每个数据点之间的每个数据点

问题描述

我想检查来自 dataframe-1 (df1) 的坐标 (x,y,z),以查看该位置是否足够接近具有存储在 dataframe-2 中的自己的坐标 (x,y,z) 的不规则表面(df2)。

我能够遍历 df1 中的每个坐标,然后遍历 df2 中的所有坐标并检查它的距离。然后对 df1 中的所有坐标重复,但是当我在 df1 中有超过 1,000,000 个坐标要检查时,这将花费很长时间。

我正在使用熊猫,想知道是否可以在不循环的情况下完成。

如果 df1 中的坐标接近 df2,那么我想选择它并将其存储到 df3 中。

标签: pythonpandas

解决方案


Scipy 可以帮助你。请看以下假设示例:

import pandas as pd 
from scipy.spatial import cKDTree

dataset1 = pd.DataFrame(pd.np.random.rand(100,3))
dataset2 = pd.DataFrame(pd.np.random.rand(10, 3))

ck = cKDTree(dataset1.values)

ck.query_ball_point(dataset2.values, r=0.1)

数组([列表([]),列表([]),列表([]),列表([]),列表([28, 83]),列表([79]),列表([]),列表([86]), 列表([40]), 列表([29, 60, 95])], dtype=object)


推荐阅读