我正在使用http://recordlinkage.readthedocs.io/en/latest/index.html 当数据集1中的某些列不一致映射到数据集2中的同一列时,如何在数据集之间提供映射。 基本上,映射是未知的,我想指定的是 - Dataset1.Column1可以映射到Dataset2.Column1或Dataset2.Column2或Dataset2.Column3 我如何指定相同的比较属性?
compare_cl = rl.Compare(pairs, dfA, dfB)
compare_cl.string(?, ?);
答案 0 :(得分:1)
首先,recordlinkage
在比较记录时不会强制执行任何类型的映射,因此您可以比较两个数据帧中的任意两列,无论这些列是否先前已进行过比较。
在您的情况下,您可以执行以下操作:
compare_cl = recordlinkage.Compare(pairs, dfA, dfB)
compare_cl.string('dfA-column-1', 'dfB-column-1')
compare_cl.string('dfA-column-1', 'dfB-column-2')
compare_cl.string('dfA-column-1', 'dfB-column-3')
recordlinkage
只能在各列之间进行比较。因此,如果要比较的值发生在多个列中,则需要在预处理阶段或分类阶段进行处理。
如果可能,请尝试使用数据预处理解决此问题。我不知道你的问题的具体细节,但听起来你的数据结构可能会使记录链接混乱,如果不在工作流程的早期解决。我强烈建议您查看Hadley Wickham's Tidy Data以获取有关数据清理的入门知识。
如果要比较的数据可以放在一个列中,请执行此操作。如果dfA
中的记录与dfB-column-1
,dfB-column-2
或dfB-column-3
相对应,而不是全部三个,则应考虑是否可以“重塑”{{1解决你的问题,例如将您的数据转换为"long format",然后使用屏蔽条件(即使用dfB
)来忽略无意义的比较。
如果(无论出于何种原因)您在预处理期间无法解决此问题,您可以在将候选链接分类为匹配/不匹配时应用条件。