Python 正确的多处理语法,将函数应用于数据帧的每一行,而不是使用块

Python 正确的多处理语法,将函数应用于数据帧的每一行,而不是使用块,python,pandas,optimization,multiprocessing,apply,Python,Pandas,Optimization,Multiprocessing,Apply,我有一个包含两列的数据框架,其中两列中的每一列都包含一个列表索引。我想逐行获取两个列表的乘积,以创建一个多索引 例如,下面的df1 |---------------------|------------------| | col_a | col_b | |---------------------|------------------| | [A1, A2] | [B1] | |----------

我有一个包含两列的数据框架,其中两列中的每一列都包含一个列表索引。我想逐行获取两个列表的乘积,以创建一个多索引

例如,下面的df1


|---------------------|------------------|
|        col_a        |        col_b     |
|---------------------|------------------|
|       [A1, A2]      |        [B1]      |
|---------------------|------------------|
|          [A3]       |      [B2, B3]    |
|---------------------|------------------|

将变成这样:

MultiIndex([('A1', 'B1'),
            ('A2', 'B1'),
            ('A3', 'B2'),
            ('A3', 'B3')],
names = ['col_a', 'col_b'], length = 4)
df1的大小约为50K行,a列中列表的平均长度为300,b列中列表的平均长度为30。由于这是一项相当繁重的任务,我决定沿着多处理路线进行以下工作:

def worker(x):
  return(x.apply(lambda row: [tup for tup in itertools.product(*row)], axis = 1).sum()

if __name__ == '__main__':
  num_processes = 56
  data_split = np.array_split(df1, num_processes)
  p = Pool(processes = num_processes)
  output = p.map(worker, data_split)
  output_tup = tuple(itertools.chain(*output))
  mult_ind = pd.MultiIndex.from_tuples(output_tup, names = df1)

虽然这比常规应用的效果要好得多,但我希望从分块转移到56个进程中的每一个进程,而是为每一个进程分配一行,在每个进程中的行上运行worker函数,pickle输出,然后为打开的进程分配新行,并重复此操作,直到所有行都完成

我认为我需要使用map_async或imap来实现这一点,但我一直无法使用语法来实现这一点。能按我的要求做吗