假设我有两个数据帧,如下所示,
[rabbitmq@{{ play_hosts | join(', rabbitmq@') }}]
我正在尝试实现一个函数,我们将传递四个参数。前两个是两个数据帧,第三个变量是列名称数组,第四个是距离参数。
对于df1中的每一行,我想找到该行与特定列的所有df2行的距离。找到距离后,我想找到所有行中的最小距离并返回相应的' e' df2的值。
例如,如果我传递a和b列,对于df1的每一行,我想找到df2中所有行的a和b之间的距离,并找到所有行的最小距离并得到相应的' E' df2的值。
对于df1的第一行,计算的距离为
df1 = pd.DataFrame({'a': [1.5, 2.5], 'b': [0.25, 2.75], 'c': [1.25, 0.75], 'd': [1.5, 2.5],'e': [0.25, 2.75], 'f': [1.25, 0.75]})
df2 = pd.DataFrame({'a': [1.5, 2.5,3.5,4.5], 'b': [0.25, 1.5, 2.5, 2.75], 'c': [1.25, 0.75, 3.5, 4.5], 'd': [1.5, 2.5, 3.5, 4.5],'e': [0.25, 2.75, 1.5, 3.5], 'f': [1.25, 0.75, 2.5, 4.5]})
找到最小距离和相应的' e' df2的值并将其存储在变量中。
以下是我的尝试,
((1.5,1.5), (0.25,0.25)) , ((1.5,2.5), (0.25,1.5)), ((1.5,3.5), (0.25,2.5)), ((1.5,4.5), (0.25,2.75)) , ((2.5,1.5), (2.75, 0.25)) , ((2.5,2.5), (2.75,1.5)), ((2.5,3.5), (2.75,2.5)), ((2.5,4.5), (2.75,2.75))
调用该函数,
def distance(x1, x2, L):
dist = (np.sum((np.array(x1)-np.array(x2))**L))**(1/(float(L)))
return dist
def shortdist(data1,data2,variables,L):
variables.append('e')
data1 = data1[variables]
data2 = data2[variables]
min_values=[]
for index2, row2 in data2.iterrows():
# print row2
for index1, row1 in data1.iterrows():
print distance(row2,row1,L)
# print row1
return min_values
我能够编写距离函数并将所需列子集化。但在那之后会遇到很多错误。