Python 在pandas中合并列的更有效方法

Python 在pandas中合并列的更有效方法,python,pandas,numpy,Python,Pandas,Numpy,我的代码计算一组样本中所有点之间的欧几里德距离。我想知道的是,一般来说,这是在一个集合中的所有元素之间执行一些操作,然后绘制它们的最有效的方法,例如,制作一个相关矩阵 样本索引用于初始化数据帧并提供标签。然后,三维坐标以元组的形式提供在三坐标元组列表中,但这很容易成为任何测量,然后可变距离可以是任何操作。我很想找到一个更有效的解决方案来制作每一列,然后使用pandas或numpy再次合并它们。我的解决方案是否会堵塞内存?我怎样才能使这个更干净 def euclidean_distance_mat

我的代码计算一组样本中所有点之间的欧几里德距离。我想知道的是,一般来说,这是在一个集合中的所有元素之间执行一些操作,然后绘制它们的最有效的方法,例如,制作一个相关矩阵

样本索引用于初始化数据帧并提供标签。然后,三维坐标以元组的形式提供在三坐标元组列表中,但这很容易成为任何测量,然后可变距离可以是任何操作。我很想找到一个更有效的解决方案来制作每一列,然后使用pandas或numpy再次合并它们。我的解决方案是否会堵塞内存?我怎样才能使这个更干净

def euclidean_distance_matrix_maker(three_D_coordinate_tuple_list, index_of_samples):
#list of tuples
#well_id or index as series or list

n=len(three_D_coordinate_tuple_list)
distance_matrix_df=pd.DataFrame(index_of_samples)    

for i in range(0, n):
    column=[]
    #iterates through all elemetns calculates distance vs this element
    for j in range(0, n):
        distance=euclidean_dist_threeD_for_tuples( three_D_coordinate_tuple_list[i],
                                         three_D_coordinate_tuple_list[j])
        column.append(distance)
    #adds euclidean distance to a list which overwrites old data frame then 
    #is appeneded with concat column wise to output matrix
    new_column=pd.DataFrame(column)
    distance_matrix_df=pd.concat([distance_matrix_df, new_column], axis=1)

distance_matrix_df=distance_matrix_df.set_index(distance_matrix_df.iloc[:,0])
distance_matrix_df=distance_matrix_df.iloc[:,1:]
distance_matrix_df.columns=distance_matrix_df.index
安装程序
scipy.space.distance_矩阵

努比 我们可以用
squareform

squareform(((x[i] - x[j]) ** 2).sum(-1) ** .5)

array([[ 0.        ,  5.19615242, 10.39230485],
       [ 5.19615242,  0.        ,  5.19615242],
       [10.39230485,  5.19615242,  0.        ]])

谢谢,不过是为了我的目的。我希望能够保留原始索引,以便比较度量。在本例中,我将欧几里德距离与另一个度量的相关性进行比较,因此当距离_矩阵(x,x)计算时,它会丢失比较数据点所需的信息。
from scipy.spatial import distance_matrix

distance_matrix(x, x)

array([[ 0.        ,  5.19615242, 10.39230485],
       [ 5.19615242,  0.        ,  5.19615242],
       [10.39230485,  5.19615242,  0.        ]])
from scipy.spatial.distance import squareform

i, j = np.triu_indices(len(x), 1)
((x[i] - x[j]) ** 2).sum(-1) ** .5

array([ 5.19615242, 10.39230485,  5.19615242])
squareform(((x[i] - x[j]) ** 2).sum(-1) ** .5)

array([[ 0.        ,  5.19615242, 10.39230485],
       [ 5.19615242,  0.        ,  5.19615242],
       [10.39230485,  5.19615242,  0.        ]])