将代码转换为numpy以获得更好的性能

问题描述 投票:1回答:1

我有这个:

partial = {}
for d in devs["d"]:
    for k in a1km:
        total = len(cp[(cp["r"]==d) & (cp["s"]==k)])
        partial.update({str(d)+str(k): total})

变量cpdevspandas数据帧,并且a1km是包含一个站点以及距该站点1km的所有站点(预先计算)的字典。对于每个d和每个站点k,我要输出的结果都是cp数据框中与查询匹配的所有记录,都存储为total,所以:

d, k, total

我从没与numpy一起工作过,我试图尽快学习,但是考虑到实验室中的时间问题,该库太大了,无法处理。所以我的问题是,如何将下面的代码“翻译”为numpy以提高性能?

python numpy scientific-computing
1个回答
1
投票

您可以过滤数据框并使用pandas.DataFrame.groupby

tmp = cp[(cp['r'].isin(devs['d'].unique()) & (cp['s'].isin(a1km))]

result_df = tmp.groupby(['r','s']).size()

请注意,这也可能非常慢。

然后将其制成字典:

partial = {str(k[0]) + str(k[1]): v for k,v in result_df.to_dict().items()}
© www.soinside.com 2019 - 2024. All rights reserved.