我是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