2016-08-03 70 views
2

我有d1和d2,我想通过ID列合并两个。 但是,ID和ID2不完全匹配。相反,ID是ID2的前8位(有时可以是前6位数字,有时也可以是一位或两位数字)。通过正则表达式或模糊匹配合并数据帧

据我所知,我可以预处理ID2只保留前8位数字。但是,我无法处理所有情况。

我不知道是否有一种先进的方式来融合正则表达式模糊匹配?比方说,如果前6位数字匹配,然后合并?

d1=pd.DataFrame({'ID':['00846U10','01381710'], 
         'count':[100,200]}) 
d2=pd.DataFrame({'ID2':['00846U101','013817101','02376R102'], 
       'value':[1,5,6]}) 
+0

预处理ID和ID2只保留6个字符,不会那么工作! –

+0

@GauravDhama它不会处理我所有的情况。更新了问题 – Lisa

+0

因此,您想要将“ID”和“ID2”都分成6个数字,如果匹配,则合并两个数据框? –

回答

1

花花公子,

我有同样的问题,唯一的解决办法是使用其他Python包。例如,看看fuzzywuzzy。这很好。

总的想法是,对于d1中的每一行,您都会查找d2中具有最高模糊匹配分数的行。

+0

谢谢@Noobie你会请示例代码? – Lisa

+0

肯定看这里http://stackoverflow.com/questions/37979167/how-to-parallelize-many-fuzzy-string-comparisons-using-apply-in-pandas。如果你满意,你可以接受。谢谢! –