在Python中查找两个数据帧列之间的最短距离的行

时间:2016-02-04 02:13:54

标签: python numpy pandas

假设我有两个数据帧,如下所示,

[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

我能够编写距离函数并将所需列子集化。但在那之后会遇到很多错误。

0 个答案:

没有答案