将Series中的每个元素相互比较-是否有比嵌套.apply()更好的方法?

我有一个长度为n的熊猫系列,我希望通过该系列实现以下目标:

for each element in the series:
 compare element to all elements in series
 save result of comparison

这将导致一个具有(n * n)比较结果的DataFrame。其中一半将是冗余重复项,因此实际预期结果将是大小为n * n / 2的该数据帧的一半。

目前,我已经通过嵌套两个.apply()函数来实现此目的,如下所示:

data = *pandas Series containing strings*

result['data'] = data
result['calculation'] = data.apply(lambda x: f(data, x))

def f(x, y):
    ret = []
    ret = x.apply(lambda x: comparison(x, y)) # comparison is in this case 'from Levenshtein import ratio'
    ret = ret.tolist()
    return ret

这将使DataFrame的“结果”具有result ['data']作为原始的字符串系列,而result ['calculation']具有包含len = n的列表以及每个计算值的Series。

因此,这是可行的,但1)它还会计算结果矩阵的冗余下半部分; 2)在任何情况下,对于较大的数据集来说都是很耗时的。有更好的方法吗?

评论