import scipy ary = scipy.spatial.distance.cdist(df2, df1, metric='euclidean') df2[ary==ary.min()] Out[894]: A B C D 14 16 66 83 13