我读了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,并使用insertstr.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个多小时.有没有办法利用矢量化解决这个问题?

谢谢

推荐答案

首先创建一个新系列,该系列是df2中的每个"地址"对应于df1中的"Address\u line"的行,如果存在这样的行:

r = '({})'.format('|'.join(df1.address_line))
merge_df = df2.Address.str.extract(r, expand=False)
merge_df

#输出:

0    123 Fake St
1            NaN
Name: Address, dtype: object

现在,我们将df1合并到"address\u line"列中,将df2合并到"merge\u df"系列中:

df1.merge(df2, left_on='address_line', right_on=merge_df)
index file_num City address_line DB_num Address
0 1.0 Toronto 123 Fake St AB1 Toronto 123 Fake St

Python相关问答推荐

使用decorator 重复超载

是否有方法将现有的X-Y图转换为X-Y-Y1图(以重新填充)?

计算相同形状的两个张量的SSE损失

如何在Python中使用io.BytesIO写入现有缓冲区?

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

Pandas 填充条件是另一列

Python在tuple上操作不会通过整个单词匹配

pandas DataFrame GroupBy.diff函数的意外输出

Django mysql图标不适用于小 case

难以在Manim中正确定位对象

如何将双框框列中的成对变成两个新列

Pytest两个具有无限循环和await命令的Deliverc函数

Django admin Csrf令牌未设置

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

将scipy. sparse矩阵直接保存为常规txt文件

基于行条件计算(pandas)

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

比Pandas 更好的 Select

如何将一组组合框重置回无 Select tkinter?

查看pandas字符列是否在字符串列中