我使用了rosetta.parallel。Pandas_easy并行化后应用组by,例如:
从rosetta.parallel。pandas_easy进口groupby_to_series_to_frame
df = pd。DataFrame ({a: 6, 2, 2, b:(4、5、6)},指数= (g1, g1, g2的))
groupby_to_series_to_frame (df, np。mean, n_jobs=8, use_apply=True, by=df.index)
然而,有人知道如何并行化一个返回数据帧的函数吗?正如预期的那样,这段代码对于rosetta来说失败了。
def tmpFunc (df):
df = df(“c”)。+ df.b
返回df
df.groupby (df.index)苹果(tmpFunc)
groupby_to_series_to_frame(df, tmpFunc, n_jobs=1, use_apply=True, by=df.index)
下面的代码你可以尝试,因为它不依赖于joblib,这对我来说是有效的:
from multiprocessing import Pool, cpu_count
def applyParallel (dfGrouped函数):
使用Pool(cpu_count()) as p:
ret_list = p.map(func, [group for name, group in df分组])
返回pandas.concat (ret_list)
这不能取代任何groupby.apply(),但它会覆盖典型的案例:例如,它应该覆盖案例2和案例3在下面的链接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.apply.html