我编写了一个简单的for循环,它可以迭代数据帧的每一行。将数据帧的每一行与第二数据帧的所有条目(该函数的第二输入)进行比较。
现在,这个函数经过一些比较和搜索,返回具有以下结构的新数据格式的回行。
new_df=pd.DataFrame(columns=['1','2','3','4','5','6','dist','unique','occurence','timediff','id'], dtype='float')
for循环现在如下所示:
for i in range(0,small_pd.shape[0]):
new_df=new_df.append(SequencesExtractTime(small_pd.loc[i],large_pd.loc[i]) )
我正试图找到一种并行运行此代码的方法,因为在单个核心上执行需要数年时间。
我找到了那个包裹
from joblib import Parallel, delayed
import multiprocessing
num_cores = multiprocessing.cpu_count()
print(Parallel(n_jobs=num_cores)(SequencesExtractTime(small_pd,large_pd)(i) for i in range(0,small_pd.shape[0])))
现在的问题是如何正确地使用这两个数据帧,以便可以从并行循环中使用。我认为问题在于,我不知道如何编写输入参数,因为我在for循环中使用了它们。
small_pd.loc[i]
以并行函数的形式表示。
你能帮我解决这个问题吗?谢谢亚历克斯
发布于 2019-07-05 03:10:36
您的DataFrames是否包含>100万行?如果是这样的话,即使并行执行粗糙的循环也会对内存造成损失。
如果您真的需要比较从第一个df到第二个df的每个列条目。试着考虑一下列表解析。
这样,您就可以利用.intersection()
或.difference()
,无论哪种方法适合您过滤这里的文件的需要。
或者试试熊猫的groupby()
https://stackoverflow.com/questions/56891029
复制