我读了this post本书,想做一些类似的事情.
我有2个dfs:
df1:
file_num | city | address_line |
---|---|---|
1 | Toronto | 123 Fake St |
2 | Montreal | 456 Sample Ave |
df2:
DB_Num | Address |
---|---|
AB1 | Toronto 123 Fake St |
AB3 | 789 Random Drive, Toronto |
我想知道df2中的哪个DB\u Num与df1中的addres\u line和city匹配,并包括匹配来自哪个file\u Num.
我的理想输出是:
file_num | city | address_line | DB_Num | Address |
---|---|---|---|---|
1 | Toronto | 123 Fake St | AB1 | Toronto 123 Fake St |
基于以上链接的帖子,我做了一个前瞻性的regex,并使用insert
和str.extract
方法进行搜索.
df1['search_field'] = "(?=.*" + df1['city'] + ")(?=.*" + df1['address_line'] + ")"
pat = "|".join(df1['search_field'])
df = df2.insert(0, 'search_field', df2['Address'].str.extract("(" + pat + ')', expand=False))
由于我在df2中的地址是手动输入的,因此有时会出现问题.
因为它是无序的,所以我使用regex的前瞻方法.
前瞻方法导致str.extract
不输出任何值.虽然我仍然可以过滤掉空值,并且只保留正确的匹配项.
我的主要问题是,我无法连接回df1以获取文件编号.
我可以通过for循环和迭代每个记录来搜索来解决这个问题,但这需要很长时间.df1实际上大约有5000条记录,而df2有数百万条记录,因此运行需要2个多小时.有没有办法利用矢量化解决这个问题?
谢谢