Python 使用多处理应用多参数函数生成列

Python 使用多处理应用多参数函数生成列,python,pandas,multiprocessing,Python,Pandas,Multiprocessing,我最近开始在数据帧上映射一些复杂函数时使用多处理。例如,如果我想基于某个其他列的值创建一个新列,我可以执行以下操作: import seaborn as sns iris = sns.load_dataset('iris') import multiprocessing as mp #example of a "complex function" returning some array def function_1(val_): return [1] * round(val_)

我最近开始在数据帧上映射一些复杂函数时使用多处理。例如,如果我想基于某个其他列的值创建一个新列,我可以执行以下操作:

import seaborn as sns
iris = sns.load_dataset('iris')

import multiprocessing as mp

#example of a "complex function" returning some array
def function_1(val_):
    return [1] * round(val_)

with mp.Pool(mp.cpu_count()) as pool:
    iris['test_1'] = pool.map(function_1, iris['petal_length'])
这比仅与lambda函数一起使用要快得多

如果我有一个函数,它将数据帧的多个其他列加上一些参数作为输入,我通常可以这样应用它:

def function_2(val_1, val_2, param_):
    return [param_] * round(val_1 + val_2)


iris['test_2'] = iris.apply(lambda x: function_2(x['petal_length'], x['sepal_width'], 3), axis=1)

如何对需要比1更多输入的函数_2使用多处理?

对此可能有更清晰的答案,但我通常会执行以下操作:

import itertools
def function_2(input):
    val_1, val_2, param_ = input
    return [param_] * round(val_1 + val_2)

iris['test_2'] = pool.map(function_2, zip(iris['petal_length'], iris['sepal_width'], itertools.repeat(3)))

您可能需要对输入应用一些附加格式才能正确执行。

可能会有所帮助。但是,如果您可以使用矢量化numpy/pandas函数编写函数,则不要认为pool是正确的方法。谢谢@QuangHoang。是的,当矢量化是可能的时候,池不是很好。然而,我的实际函数非常复杂,需要进行模拟和预测,我不确定是否能够使用矢量化的numpy/pandas函数。