我试图比较一个字符串列表的相似度,并将结果放在 Pandas 数据框中以供检查;因此我使用一个列表作为索引,另一个列表作为列。然后我想要在它们上面计算 "Levenshtein 相似度"(一种比较两个单词之间相似度的函数)。
我尝试使用 applymap
在每个单元格上执行此操作,并将单元格索引与单元格列进行比较。我该如何做?还有更简单的替代方法吗?
things = ['car', 'bike', 'sidewalk', 'eatery']
action = ['walking', 'caring', 'biking', 'eating']
matrix = pd.DataFrame(index = things, columns = action)
def lev(x):
x = Levenshtein.distance(x.index, x.column)
matrix.applymap(lev)
到目前为止,我只能采用以下方法(下面)使用,但我发现它笨拙而缓慢。
matrix = pd.DataFrame(data = [action for i in things], index = things, columns = action)
for i, values in matrix.iterrows():
for j, value in enumerate(values):
matrix.ix[i,j] = Levenshtein.distance(i, value)
这里
提到的方法可能会更快。但是如果在每次循环中应用某些函数,则可能具有相同的性能。 - jezraelreturn x.index + x.name
时,出现了AttributeError: 'int' object has no attribute 'name'和AttributeError: 'int' object has no attribute 'index'的错误。我的数据框由整数组成。 - rkian.apply()
,而不是在数据框上操作。 - smci