【发布时间】:2020-09-04 03:28:38
【问题描述】:
我有一个列表想要转换成距离矩阵
from pylev3 import Levenshtein
from itertools import combinations
mylist = ['foo', 'bar', 'baz', 'foo', 'foo']
以下从列表中生成所有可能的对,需要计算矩阵
list(combinations(mylist,2))
[('foo', 'bar'),
('foo', 'baz'),
('foo', 'foo'),
('foo', 'foo'),
('bar', 'baz'),
('bar', 'foo'),
('bar', 'foo'),
('baz', 'foo'),
('baz', 'foo'),
('foo', 'foo')]
然后可以通过以下方式计算每对的距离:
def ld(a):
return [Levenshtein.classic(*b) for b in combinations(a, 2)]
ld(mylist)
[3, 3, 0, 0, 1, 3, 3, 3, 3, 0]
但是,我一直坚持在 pandas 中创建一个类似矩阵的数据框 - 在 pandas 中是否有一个雄辩的解决方案?
foo bar baz foo foo
1 foo 0 3 3 0 0
2 bar 3 0 1 3 3
3 baz 3 1 0 3 3
4 foo 0 3 3 0 0
5 foo 0 3 3 0 0
【问题讨论】:
-
您的
mylist有重复条目。这是故意的吗? -
是的,这是故意的
标签: python pandas string matrix distance