我试了一下楼主的代码,确实比较花时间,我个人的理解是,实际上你需要的是把ap_addr里面的邮编匹配post里面的邮编,那为了避免循环匹配,我建议这样:
1. 生成一个新的post的表,这个表完成所有的州和城市的邮编
2. 在data_us生成一列,专门储存邮编
3. 将这两个表以data_us为基础,做左连接(left_join), 以邮编作为键。
理论上循环应该可以完全避免,但我水平有限,在生成邮编表的时候,有些地方为了省事还是用了循环
我尝试了一下,这样应该几秒钟就可以出结果。
我留意到你这个数据存在一些问题,导致最后有一些重复项
1. 有的邮编对应多于一个城市和地区,比如‘11102’可以对应纽约,长岛和Astoria
2. 有的邮编地址里面写明了城市,但是在post里面是找不到的,比如‘01701’对应的是麻省的‘Framingham’,但是post里面的邮编范围是不包括这个城市的。
3. 有的人包括多于两个以上的美国地址,比如data_us第23行,包含了95054(加州圣克拉拉)和97124(俄勒冈希尔斯堡), 这个问题我没具体处理,但是实际操作相当于你把这个地址复制含有n个独立的邮编复制n次。