我有一个包含2列邮政编码的数据框,我想添加另一列及其距离值,我能够用很少的行数来做到这一点,但是现在我正在使用一个包含大约500,000行用于计算。我已经编写了代码,但是在我当前的数据帧上,它已经运行了大约30分钟,并且仍未完成,所以我觉得我的工作效率极低。
这是代码
import pgeocode
dist = pgeocode.GeoDistance('us')
def distance_pairing(start,end):
return dist.query_postal_code(start, end)
zips['distance'] = zips.apply(lambda x: distance_pairing(x['zipstart'], x['zipend']), axis=1)
zips
我知道循环是不可能的,所以还有其他我可以做的事,从效率角度来看,这样做会更好吗?
答案 0 :(得分:0)
尽可能在pandas和numpy中使用矢量化运算。在这种情况下:
zips['distance'] = dist.query_postal_code(
zips['zipstart'].values,
zips['zipend'].values,
)
这并不总是可行的,但是在这种情况下,底层的pgeocode.haversine
函数被写入(以numpy格式)以容纳x和y坐标数组。对于这种大小的数据帧,这将使代码加速几个数量级。