首页 > 解决方案 > 使用多处理应用多参数函数以生成熊猫列

问题描述

我最近开始multiprocessing在 pandas 数据框上映射一些复杂的函数时使用。例如,如果我想根据其他列的值创建一个新列,我可以这样做:

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'])

apply这比仅使用with快得多lambda function

如果我有一个函数将数据框的多个其他列(甚至一些参数)作为输入,我通常可以像这样应用它:

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)

我如何使用multiprocessingwhichfunction_2需要比 1 更多的输入?

标签: pythonpandasmultiprocessing

解决方案


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

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)))

您可能必须对输入应用一些额外的格式才能正确执行此操作。


推荐阅读