python - 如何加快python函数调用速度

标签 python pandas function performance

我有一个数据集,为简单起见,我将仅指出一个主要特征 - 邮政编码。 我需要通过函数调用获得另一项功能(该地区的主要邮局)并添加到数据框(示例)中。

两者都是整数。

<表类=“s-表”> <标题> 邮政编码 主邮政编码 <正文> 12345 12301 23456 23407 34567 34504

关于函数的一些说明:它获取邮政编码的前 3 位数字,然后从所有邮政编码列表中获取从这 3 位数字开始的最小值。

您不会总是在此列表中找到看起来像 XXX01 的值,它可以是 XXX05 或 XXX07 或 XXX(任何其他)。我们假设它可以是任何数字。

邮政编码列表如下所示(大约 40K 元素):

zipcode = [1001,1002,...,99999]

我的函数如下所示:

def findMainPostOffice(num):

    ''' takes zip and returns nearest available main zip in list 'zipcode' '''

    start = int(str(num // 100) + '00')
    m = min([i for i in zipcode if i > start and i < num], default=num)
    return m

我将此函数称为:

df['mainPostCode'] = df.postalCode.apply(findMainPostOffice)

问题是这个函数需要很长时间。在我的数据集上,大约需要 72 小时。 您能帮我加快速度吗?

最佳答案

IIUC,可以使用groupby求最小值(主要邮政编码)

df['mainPostCode'] = (df.groupby(df['postalCode'].astype(str).str.zfill(5).str[:2])
                        .transform('min'))
print(df)

# Output
       postalCode  mainPostCode
0           23041         23003
1           48558         48000
2           52895         52000
3           39817         39000
4           40427         40000
...           ...           ...
39995       81184         81000
39996        7125          7001
39997       22773         22003
39998       88802         88002
39999       58510         58000

[40000 rows x 2 columns]

输入:

import pandas as pd
import numpy as np

np.random.seed(2023)
df = pd.DataFrame({'postalCode': np.random.randint(1000, 100000, 40000)})

关于python - 如何加快python函数调用速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75289314/

相关文章:

python - 无法绘制饼图的值计数

python - 创建带有增量计数器的列,用于识别 Pandas 中的重复集

python - 通过空格缩进实现类似选项卡的导航

python - 如何将 Pandas 列转换为数组并进行转置?

python - 属性错误浮点对象没有属性 'append'

python - 从分类数据类型列中提取平均值

Python 热图 : Change colour map and make asymmetrical

PHP向关闭函数添加参数

php - 将在一个函数中创建的 PHP 变量传递给另一个函数

python - 并行处理大量小任务