两个数据帧中的点之间的距离



我是python的新手,我尝试过搜索,但找不到解决方案。

我有两个笛卡尔坐标的数据帧。

node    x      y    value
abc    645    714   8 
def    187    754   11 
location  x    y    value
ijk      621  744   1 
lmn      202  720   -5  

我想找到df2中每个位置与df1中节点的最小距离,并更新df1中的"值"。

我看过cdist来计算最小距离,但我如何将其链接回相应的距离?节点

由于ijk接近abc,lmn接近def,因此最终的答案应该是

node    x      y    value
abc    645    714   9 
def    187    754   6

这里有一种从头开始的方法:

import numpy as np
import pandas as pd
df1 = pd.DataFrame({'node': ['abc', 'def'], 
'x': [645, 187], 
'y': [714, 754], 
'value': [8, 11]}) 
df2 = pd.DataFrame({'location': ['ijk', 'lmn'], 
'x': [621,  202], 
'y': [744, 720], 
'value': [1, -5]}) 
# compute Euclidean distances (using Pythagoras' theorem)
df2['distances'] = [[((df1['x'][j] - df2['x'][i]) ** 2 
+ (df1['y'][j] - df2['y'][i]) ** 2) ** 0.5 
for j in range(len(df1))] 
for i in range(len(df2))]
df2
location  x     y      value  distances
0   ijk       621   744     1     [38.41874542459709, 434.11519208615584]
1   lmn       202   720    -5     [443.0406301909566, 37.16180835212409]
df1['new_value'] = [df1['value'][row] + df2['value'][np.argmin(df2['distances'][row])] 
for row in range(len(df1))] 
df1
node    x       y      value  new_value
0   abc     645     714     8     9
1   def     187     754    11     6

相关内容

  • 没有找到相关文章

最新更新