python - 通过比较包含不同格式电话号码的两个数据框列来过滤数据框
问题描述
我有一个数据框 df1,其中包含以下格式的美国电话号码列表:区号 + 电话号码
它包含国际电话号码
这个数据框有几百行长
df1['phoneNumber'] = ['123456789', '1115559999','1112223333', '442071231234']
我有另一个数据框 df2,其中包含数百万条不同格式的电话记录,例如:国家代码 + 区号 + 电话号码
“9”+区号+电话号码等业务任意拨出号码
国际电话号码
df2['phoneNumber'] = ['1123456789', '81115559999','442071231234','1111111111', '0133344556677']
我想通过检查较小数据帧中的电话号码是否在较大数据帧中来过滤较大的数据帧,因为较大的数据集有时会有较长的电话号码字符串。
这可能吗?我一直在使用 for 循环和函数来过滤数据,但循环和过滤一百万条记录需要三四分钟。
谢谢你。
编辑: 我当前的代码是这样的:
matching_numbers_list = []
def match_numbers(phone_number, phone_number_li):
matching_number = next((row for row in phone_number_li if row in phone_number), None)
matching_numbers_list.append(matching_number)
# code worked faster when I didn't use entire df in function
phone_number_list = df1['PhoneNumber']
[match_numbers(row[0], phone_number_list) for row in zip(df2['PhoneNumber'])]
# add additional column with matched numbers
df2['MatchedNumbers'] = matching_numbers_list
# inner join based on the matched numbers
filtered_df = pd.merge(df2, df1, how='inner', left_on='MatchedNumbers', right_on='PhoneNumber')
解决方案
df2
这将对列表中的每个电话号码进行部分字符串匹配df1
。
df2[df2['phoneNumber'].str.contains('|'.join(df1['phoneNumber']))]
推荐阅读
- python - 如何生成给定长度的所有可能组合
- python-requests - 使用 httpx 异步客户端和坚韧的最佳方式?
- reactjs - 单元测试组件在 TypeScript 中使用带有 Jest 和 Enyzme 的“ChartJS”来解决 React 错误:TypeError: Cannot read property 'getContext' of null
- python - 我在 Google Collab 上遇到 Parlai blenderbot 问题
- integer - 字节、字和双字数字表示
- ios - 由于 info.plist 中不支持的最低操作系统版本,Appstore 连接拒绝更新(颤振应用程序)
- python - 将 Tie 设置为 HIGH 的 SAS 排名转换为 PySpark
- javascript - 如何获得对面的财产?
- lc3 - 我们刚刚使用 GETC 命令从键盘读取了一个数字。将此值转换为二进制并将其放入 R4
- javascript - JQuery Datepicker Oracle APEX