首页 > 解决方案 > 将数据帧值与另一个数据帧值的值进行比较

问题描述

好的,所以我有两个数据框

数据框

   name  LAT   LONG
0  AAA   XX.XX XX.XX
1  BBB   XX.XX XX.XX
2  CCC   XX.XX XX.XX
3  DDD   XX.XX XX.XX

数据框 b

     name  LAT   LONG
0  EEE   XX.XX XX.XX
1  FFF   XX.XX XX.XX
2  GGG   XX.XX XX.XX
3  HHH   XX.XX XX.XX

现在我想创建一个新的数据帧,其中包含数据帧 a 中的所有点,其中数据帧 a 的点与数据帧 b 中的点之间的距离小于 X 米。

我使用嵌套的 for 循环来实现这一点,但这需要太多时间。我使用公式 geopy.distance.distance(coords_1, coords_2).meters 来计算距离。

任何的意见都将会有帮助!

标签: pythonpandasdataframe

解决方案


我不熟悉geopy或使用LAT/LONG,但如果我有两个坐标并且想要一个df中的点足够接近另一个df中的一个点,我会做这样的事情

data1 = [['aaa', 1, 2], ['bbb', 3, 5]] 
data2 = [['ccc', 1, 8], ['ddd', 3, 9]]
columns_names = ['name', 'LAT', 'LONG'] 
df1 = pd.DataFrame(data1, columns=column_names) 
df2 = pd.DataFrame(data2, columns=column_names)

distance_of_interest = 6      # or 1 in your case

df3 = pd.DataFrame(df1[np.sqrt((df1.LAT-df2.LAT)**2 + (df1.LONG - df2.LONG)**2) < distance_of_interest],
                   columns=column_names) 


df3 >
        name  LAT  LONG
     1  bbb    3     5                                                                        

虽然这假设点aaa对应于ccc等。如果你想比较aaa两者cccddd我无法想出一个不使用 for 循环的快速答案。

希望它可以帮助您以某种方式解决它,祝您好运。


推荐阅读