生成 5 个变量,然后在 Itertools 产品中使用。有什么办法可以加快速度吗

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

我有这个代码:

import pandas as pd
from itertools import product

for a, b, c, d, e in product(range(x), range(y), range(z), range(t), range(m):
    factor = foo(a, b, c, d, e)
    result_df.loc[len(result_df.index)] = [a, b, c, d, e, factor]

其中我使用 itertools.product 生成 5 个变量,然后在 foo 函数中使用这 5 个变量。然后将结果附加到数据框。

foo 函数经过全面优化,在每次计算中都使用向量化和 numpy。

有什么办法可以让这段代码运行得更快吗?

编辑: 所以显然使用 df.loc 追加非常慢。 你有什么建议? 如何存储每次迭代的 a、b、c、d、e 和因子,然后从中创建数据框?

python pandas vectorization nested-loops python-itertools
1个回答
0
投票

正如评论中提到的,不要增量增长数据帧。这是低效的。使用列表。你可以这样做:

df = pd.DataFrame(
    [
        [*tup, foo(*tup)]
        for tup in product(range(x), range(y), range(z), range(t), range(m))
    ]
)

然后您可以为列指定适当的名称(您也可以预先这样做)。

© www.soinside.com 2019 - 2024. All rights reserved.