我有一个这样的表:
id name
1 gfh
2 bob
3 boby
4 hgf
等等
我想知道如何使用 Levenshtein 指标来比较“名称”列的不同行?
我已经知道我可以使用它来比较列:
L.distance('Hello, Word!', 'Hallo, World!')
但是行呢?
最佳答案
这是使用 pandas 和 numpy 实现此操作的方法:
from numpy import triu, ones
t = """id name
1 gfh
2 bob
3 boby
4 hgf"""
df = pd.read_csv(pd.core.common.StringIO(t), sep='\s{1,}').set_index('id')
print df
name
id
1 gfh
2 bob
3 boby
4 hgf
使用字符串列表创建数据框来测量距离:
dfs = pd.DataFrame([df.name.tolist()] * df.shape[0], index=df.index, columns=df.index)
dfs = dfs.applymap(lambda x: list([x]))
print dfs
id 1 2 3 4
id
1 [gfh] [bob] [boby] [hgf]
2 [gfh] [bob] [boby] [hgf]
3 [gfh] [bob] [boby] [hgf]
4 [gfh] [bob] [boby] [hgf]
混合列表以形成具有所有变体的矩阵,并将右上角设置为 NaN:
dfd = dfs + dfs.T
dfd = dfd.mask(triu(ones(dfd.shape)).astype(bool))
print dfd
id 1 2 3 4
id
1 NaN NaN NaN NaN
2 [gfh, bob] NaN NaN NaN
3 [gfh, boby] [bob, boby] NaN NaN
4 [gfh, hgf] [bob, hgf] [boby, hgf] NaN
测量L.distance
:
dfd.applymap(lambda x: L.distance(x[0], x[1]))
关于python - 如何将一列的不同行与 pandas 中的 Levenshtein 距离度量进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29429509/