计算来自两个不同数据帧的两个字符串列之间的 Levenshtein 距离
Compute Levenshtein Distance between two String Columns from two different dataframes
我有两个包含相同字符串列(主机名)的数据帧,我想计算两个数据帧之间所有可能的主机名对组合之间的 Levenshtein 距离,并将结果放在第三个数据帧中,我在其中保持距离每个可能的组合以及该组合的两个索引。
例如,假设我有这两个数据帧:
Index Hostname
85608 dlt-rly-tracker-3.datto.com
9378 lnv7bc4241e2.1528.ozvision.ozsn.net
22791 dlt-rly-tracker-1.datto.com
88922 pw-file
94560 lnv7bc4241e2.1528.ozvision.ozsn.net
13245 -
63604 pw-file
435839 pw-file
95473 -
13856 pw-file
210705 pw-file
30046 -
106917 dlt-rly-tracker-2.datto.com
415925 pw-file
170471 pw-file
73971 -
86885 dlt-rly-tracker-3.datto.com
162764 pw-file
74791 pw-file
和第二个数据帧:
Index Hostname
93358 device.dattobackup.com
34067 dlt-rly-tracker-5.datto.com
18083 46.104.89.54.in-addr.arpa
96798 pw-file
130940 pw-file
31476 lnv7bc4241e2.1528.ozvision.ozsn.net
149723 pw-file
52901 -
308834 lnv7bc4241e2.1528.ozvision.ozsn.net
24196 pw-file
69038 -
244454 lnv7bc4241e2.1528.ozvision.ozsn.net
2867 -
45549 daisy.ubuntu.com
334378 pw-file
86006 46.104.89.54.in-addr.arpa
430257 pw-file
86150 46.104.89.54.in-addr.arpa
65189 pw-file
我想要做的是获取主机名的第一个值 (dlt-rly-tracker-3.datto.com) 并计算 levenshtein 距离与第二个数据帧中主机名的所有值 (一个接一个) ).将此过程结束时的结果存储在类似于以下内容的新数据框中:
Indexes Distance Hostnames
85608-93358 23 dlt-rly-tracker-3.datto.com,device.dattobackup.com
85608-34067 60 dlt-rly-tracker-3.datto.com,dlt-rly-tracker-5.datto.com
非常感谢任何帮助解决我的问题。谢谢
下面的解决方案将循环遍历两个数据框并使用所需数据创建一个新字典。然后,您应该将此字典转换为数据框。让我知道这是否有帮助!
dist = {}
for rowname, row in df.iterrows():
for rowname1, row1 in df1.iterrows():
L = Levenstein(row.Hostname, row1.Hostname)
dist.update( {rowname+’-‘+rowname1 : (L, row.Hostname+’,’+row1.Hostname} )
这是我的解决方案。
import pandas as pd
from nltk import edit_distance
在这里你需要创建你的两个DataFrame。我假设它们被称为:
df1
df2
outputList = []
for rowLeft in df1.iterrows():
for rowRight in df2.iterrows():
indexes = str(rowRight[1][0]) + "-" + str(rowLeft[1][0])
distance = edit_distance(rowRight[1][1],rowLeft[1][1])
hostNames = rowRight[1][1] + "-" + rowLeft[1][1]
outputList.append({"Indexes": indexes, "Distance":distance, "Hostnames":hostNames})
outputDf = pd.DataFrame(outputList)
我有两个包含相同字符串列(主机名)的数据帧,我想计算两个数据帧之间所有可能的主机名对组合之间的 Levenshtein 距离,并将结果放在第三个数据帧中,我在其中保持距离每个可能的组合以及该组合的两个索引。
例如,假设我有这两个数据帧:
Index Hostname
85608 dlt-rly-tracker-3.datto.com
9378 lnv7bc4241e2.1528.ozvision.ozsn.net
22791 dlt-rly-tracker-1.datto.com
88922 pw-file
94560 lnv7bc4241e2.1528.ozvision.ozsn.net
13245 -
63604 pw-file
435839 pw-file
95473 -
13856 pw-file
210705 pw-file
30046 -
106917 dlt-rly-tracker-2.datto.com
415925 pw-file
170471 pw-file
73971 -
86885 dlt-rly-tracker-3.datto.com
162764 pw-file
74791 pw-file
和第二个数据帧:
Index Hostname
93358 device.dattobackup.com
34067 dlt-rly-tracker-5.datto.com
18083 46.104.89.54.in-addr.arpa
96798 pw-file
130940 pw-file
31476 lnv7bc4241e2.1528.ozvision.ozsn.net
149723 pw-file
52901 -
308834 lnv7bc4241e2.1528.ozvision.ozsn.net
24196 pw-file
69038 -
244454 lnv7bc4241e2.1528.ozvision.ozsn.net
2867 -
45549 daisy.ubuntu.com
334378 pw-file
86006 46.104.89.54.in-addr.arpa
430257 pw-file
86150 46.104.89.54.in-addr.arpa
65189 pw-file
我想要做的是获取主机名的第一个值 (dlt-rly-tracker-3.datto.com) 并计算 levenshtein 距离与第二个数据帧中主机名的所有值 (一个接一个) ).将此过程结束时的结果存储在类似于以下内容的新数据框中:
Indexes Distance Hostnames
85608-93358 23 dlt-rly-tracker-3.datto.com,device.dattobackup.com
85608-34067 60 dlt-rly-tracker-3.datto.com,dlt-rly-tracker-5.datto.com
非常感谢任何帮助解决我的问题。谢谢
下面的解决方案将循环遍历两个数据框并使用所需数据创建一个新字典。然后,您应该将此字典转换为数据框。让我知道这是否有帮助!
dist = {}
for rowname, row in df.iterrows():
for rowname1, row1 in df1.iterrows():
L = Levenstein(row.Hostname, row1.Hostname)
dist.update( {rowname+’-‘+rowname1 : (L, row.Hostname+’,’+row1.Hostname} )
这是我的解决方案。
import pandas as pd
from nltk import edit_distance
在这里你需要创建你的两个DataFrame。我假设它们被称为:
df1
df2
outputList = []
for rowLeft in df1.iterrows():
for rowRight in df2.iterrows():
indexes = str(rowRight[1][0]) + "-" + str(rowLeft[1][0])
distance = edit_distance(rowRight[1][1],rowLeft[1][1])
hostNames = rowRight[1][1] + "-" + rowLeft[1][1]
outputList.append({"Indexes": indexes, "Distance":distance, "Hostnames":hostNames})
outputDf = pd.DataFrame(outputList)