有没有办法在数据框中的两个字符串列之间执行编辑距离?
Is there a way to perform edit distance between two string columns in a dataframe?
我有两个数据集:dataset1 和 dataset2(提供图像 link),它们有一个名为 SAX
的公共列,它是一个字符串对象。
dataset1=
SAX
0 glngsyu
1 zicobgm
2 eerptow
3 cqbsynt
4 zvmqben
.. ...
475 rfikekw
476 bnbzvqx
477 rsuhgax
478 ckhloio
479 lbzujtw
480 rows × 2 columns
和
dataset2=
SAX
0 glngsyu
1 zicobgm
2 eerptow
3 cqbsynt
4 zvmqben
.. ...
475 rfikekw
476 bnbzvqx
477 rsuhgax
478 ckhloio
479 lbzujtw
480 rows × 2 columns
我需要输出是将数据集 1 的“SAX”列转换为数据集 2 的“SAX”所需的最少编辑(操作)数列。有办法实现吗?
谢谢。
使用 textdistance 模块的 Levenshtein 距离:
from textdistance import levenshtein
# Merge the two columns in one dataframe
df = dataset1[['SAX']].merge(dataset2[['SAX']], left_index=True, right_index=True, suffixes=('_1', '_2'))
# Compute the Levenshtein distance
df['distance'] = df.apply(lambda x: levenshtein.distance(x['SAX_1'], x['SAX_2']), axis=1)
我会使用 pylev 模块来完成这项任务。它是纯粹的python,所以它应该可以在任何操作系统中运行pip install pylev
。为了比较成对元素,我会利用 zip
,考虑以下简单示例
import pylev
import pandas as pd
df1 = pd.DataFrame({'col1':['some','values','here']})
df2 = pd.DataFrame({'col1':['same','virtues','there']})
dfdist = pd.DataFrame({'dist':[pylev.levenshtein(*i) for i in zip(df1.col1,df2.col1)]})
print(dfdist)
输出
dist
0 1
1 3
2 1
我有两个数据集:dataset1 和 dataset2(提供图像 link),它们有一个名为 SAX
的公共列,它是一个字符串对象。
dataset1=
SAX
0 glngsyu
1 zicobgm
2 eerptow
3 cqbsynt
4 zvmqben
.. ...
475 rfikekw
476 bnbzvqx
477 rsuhgax
478 ckhloio
479 lbzujtw
480 rows × 2 columns
和
dataset2=
SAX
0 glngsyu
1 zicobgm
2 eerptow
3 cqbsynt
4 zvmqben
.. ...
475 rfikekw
476 bnbzvqx
477 rsuhgax
478 ckhloio
479 lbzujtw
480 rows × 2 columns
我需要输出是将数据集 1 的“SAX”列转换为数据集 2 的“SAX”所需的最少编辑(操作)数列。有办法实现吗?
谢谢。
使用 textdistance 模块的 Levenshtein 距离:
from textdistance import levenshtein
# Merge the two columns in one dataframe
df = dataset1[['SAX']].merge(dataset2[['SAX']], left_index=True, right_index=True, suffixes=('_1', '_2'))
# Compute the Levenshtein distance
df['distance'] = df.apply(lambda x: levenshtein.distance(x['SAX_1'], x['SAX_2']), axis=1)
我会使用 pylev 模块来完成这项任务。它是纯粹的python,所以它应该可以在任何操作系统中运行pip install pylev
。为了比较成对元素,我会利用 zip
,考虑以下简单示例
import pylev
import pandas as pd
df1 = pd.DataFrame({'col1':['some','values','here']})
df2 = pd.DataFrame({'col1':['same','virtues','there']})
dfdist = pd.DataFrame({'dist':[pylev.levenshtein(*i) for i in zip(df1.col1,df2.col1)]})
print(dfdist)
输出
dist
0 1
1 3
2 1