【发布时间】:2020-08-17 04:20:16
【问题描述】:
我正在使用 recordlinkage 来查找两个大小不等的数据帧之间的匹配项,它输出一个多索引数据帧(特征),其中包含第一个索引(左)中 df_a 中匹配项的相应行号,第二个索引中 df_b 也是如此(正确的)。我只想合并 df_a 和 df_b 中正确索引处的匹配项,如下所示:
df_a
col_a col_b col_c
a
b
c
d
e
df_b
col_1 col_2 col_3
1
2
3
4
5
6
7
8
9
10
功能
match
left right
a 2
3
b 7
8
9
结束 合并2
match col_a col_b col_c col_1 col_2 col_3
left right
a 2
3
b 7
8
9
这是相关的sn-p:
for i in range(0,in_a_lines,chunks):
if i < in_a_lines - chunks:
df_a_subset = df_a.iloc[i:i+chunks]
else:
df_a_subset = df_a.iloc[i:in_a_lines]
indexer = recordlinkage.Index()
indexer.block(left_on = [comp_left], right_on = [comp_right])
pairs_subset = indexer.index(df_a_subset, df_b)
comp = recordlinkage.Compare()
comp.string(left_on = comp_left, right_on = comp_right, method='jarowinkler', threshold = 0.85)
features = comp.compute(pairs_subset, df_a_subset, df_b).rename_axis(['left', 'right'])
print(str(i+chunks)+"/"+str(in_a_lines)+"\nPotential matches: "+str(len(features)))
merge1 = df_b.join(features, on=['right'])
merge2 = df_a_subset.join(merge1, on = ['left'])
merge2.to_csv(out_csv,
header = None,
index = None,
mode='a',
chunksize=chunks)
【问题讨论】:
-
为什么左1匹配右2和4?
-
recordlinkage.Compare() 采用两个单索引数据帧并找到部分字符串匹配,输出一个多索引数据帧,索引由它在这两者之间找到匹配的位置确定。在这种情况下,这意味着 df_a 第 1 行的条目与 df_b 第 2 行和第 4 行的条目匹配。我将对其进行编辑以更清楚地说明这是两个单独的索引。