熊猫列循环的并行处理

时间:2020-06-24 17:43:44

标签: python pandas parallel-processing

我有以下要加快的代码。

编辑:我们希望'colsi'中的列被'colsj'中的组列移动。熊猫允许我们通过向量化“ colsi”一次移动多个列。我遍历每个组列并执行向量化移位。然后,我用“ colsi”中列的中位数填充NA。重新索引只是在分配新的空白列之前创建它们。问题是我有很多小组,遍历每个小组变得很耗时。

EDIT2:我的目标是根据每个组的延迟来设计新列。我有很多组列和许多要移动的列。 'colsi'包含要移动的列。 'colsj'包含组列。我可以对“ colsi”进行矢量化处理,但是循环遍历“ colsj”中的每个组列仍然很耗时。

colsi = ['a', 'b', 'c']
colsj = ['d', 'e', 'f']
med = df[colsi].median()

for j in colsj:
    newcols=[j+i+'_n' for i in colsi]
    newmed = med.copy()
    newmed.index=newcols
    df = df.reindex(columns=df.columns.tolist()+newcols) 
    df[newcols] = df.groupby(j)[colsi].shift()
    df[newcols] = df[newcols].fillna(newmed)

并行化似乎是一种很好的方法。靠着this code,我尝试了以下操作,但没有成功:

from multiprocessing.pool import ThreadPool
pool = ThreadPool(processes=3)

colsi = ['a', 'b', 'c']
colsj = ['d', 'e', 'f']
med = df[colsi].median()

def funct(j):
    newcols=[j+i+'_n' for i in colsi]
    newmed = med.copy()
    newmed.index=newcols
    df = df.reindex(columns=df.columns.tolist()+newcols) 
    df[newcols] = df.groupby(j)[colsi].shift()
    df[newcols] = df[newcols].fillna(newmed)

for j in colsj:
    pool.apply_async(funct, (j))

我对如何进行并行处理一无所知,所以我不确定这里缺少什么。请告知。

0 个答案:

没有答案