熊猫数据框中的两个大列之间的计算

时间:2020-05-27 20:28:13

标签: python pandas lambda

我有一个包含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

我知道循环是不可能的,所以还有其他我可以做的事,从效率角度来看,这样做会更好吗?

1 个答案:

答案 0 :(得分:0)

尽可能在pandas和numpy中使用矢量化运算。在这种情况下:

zips['distance'] = dist.query_postal_code(
    zips['zipstart'].values,
    zips['zipend'].values,
)

这并不总是可行的,但是在这种情况下,底层的pgeocode.haversine函数被写入(以numpy格式)以容纳x和y坐标数组。对于这种大小的数据帧,这将使代码加速几个数量级。