python - 比较 Pandas 列以评估它们是否包含相同的数字或一组数字
问题描述
我有一个包含两个地址信息的数据集,我需要比较它们以评估它们是否包含相同的数字或一组数字。
这是我的数据集
data = [['Road 76', 'Road 12, 55'], ['Road 11, 7-9', 'Road 11, 5'], ['Road 25', 'Street 5']]
df_original = pd.DataFrame( data, columns = ['Address 1', 'Address 2'])
这是结果
test_data = [['Road 76', 'Road 12, 55', 0], ['7-9, Road 11', 'Road 11, 5', 1], ['Road 5', 'Street 25', 0]]
df_outcome = pd.DataFrame(test_data, columns = ['Address 1', 'Address 2', 'Number Match?'])
df_outcome
这是我的尝试,但它只考虑列中出现的第一个数字
df_original['Address 1'] = df_original['Address 1'].str.extract('(\d+)')
df_original['Address 2'] = df_original['Address 2'].str.extract('(\d+)')
df_original['Number match'] = np.where(df_original['Address 1']==df_original['Address 2'], 1, 0)
建议?
解决方案
首先获取所有整数Series.str.findall
,将值转换为集合并用于交集&
,最后转换为布尔值以进行映射True->1, False->0
:
df_original['Address 1'] = df_original['Address 1'].str.findall('(\d+)').apply(set)
df_original['Address 2'] = df_original['Address 2'].str.findall('(\d+)').apply(set)
df_original['Number match'] = (df_original['Address 1'] & df_original['Address 2']).astype(int)
print (df_original)
Address 1 Address 2 Number match
0 {76} {55, 12} 0
1 {9, 7, 11} {5, 11} 1
2 {25} {5} 0
推荐阅读
- swift - Swift,使用 RxSwift 的 Tabbar 控制器的变量订阅
- c# - 相机未在我的 xamarin.forms 应用程序中的 UWP 中打开?
- spring-boot - eclipse错误中的spring boot应用程序终止
- ruby-on-rails - 来自 github/gitlab 的 ROR 应用持续部署
- c# - 无法使用 C# 将 Excel 上传数据输入 SQL Server 数据库
- angular6 - 如何创建具有多个模块的 Angular 6 库
- c# - 为什么在写入文件之前转移一个 int?
- python - Python - 重复给定函数n次
- python - Glade - 从文件加载时对象类型“WebKitWebView”无效。适用于 Glade 应用程序
- java - 如何读取 jar 中 HTML 文件的所有内容并将其存储在字符串中