我有以下要加快的代码。
编辑:我们希望'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))
我对如何进行并行处理一无所知,所以我不确定这里缺少什么。请告知。