首页 > 解决方案 > 通过比较包含不同格式电话号码的两个数据框列来过滤数据框

问题描述

我有一个数据框 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')

标签: pythonpandasdataframe

解决方案


df2这将对列表中的每个电话号码进行部分字符串匹配df1

df2[df2['phoneNumber'].str.contains('|'.join(df1['phoneNumber']))]

推荐阅读