我无法将此问题准确反映为标题。我想正确使用list,func(*args)和Pool.map。请参阅下面。
▼代码def df_parallelize_run(func, arguments):
p = Pool(psutil.cpu_count())
df = p.map(func, arguments)
p.close()
p.join()
return dfdef make_lag(df: DataFrame, LAG_DAY: list):
for l in LAG_DAY:
df[f'lag{l}d'] = df.groupby(['id'])['target'].transform(lambda x: x.shift(l))
return dfdef wrap_make_lag(args):
return make_lag(*args)
鉴于以上三个功能,我想执行以下操作# df: DataFrame
arguments = (df, [1, 3, 7, 13, 16])
df = df_parallelize_run(wrap_make_lag, arguments)
▼错误in df_parallelize_run(func, arguments)
----> 7 df = pool.map(func, arguments)
in ..../python3.7/multiprocessing/pool.py in map(self, func, iterable, chunksize)
--> 268 return self._map_async(func, iterable, mapstar, chunksize).get()
in ..../python3.7/multiprocessing/pool.py in get(self, timeout)
--> 657 raise self._value
TypeError: make_lag() takes 2 positional arguments but 5 were given
我知道这种不匹配的原因(由于解压缩列表[1, 3, 7, 13, 16],所以为5)。怎么做呢?如果可能的话,我想让这个列表适合位置参数的约束。如果几乎不可能(list或Pool.map),哪种方法更合适,更简便,更灵活?