在Python中并行化多表函数的最佳方法(使用Pandas)

时间:2018-12-03 00:12:49

标签: pandas function parallel-processing dask

我在下面具有此功能,该功能遍历数据帧的每一行(使用大熊猫应用),并通过引用另一个数据帧(GST)确定有效值从预测概率矩阵(L2)确定有效值对于给定的行。该函数只是返回行,并以传递给函数(test_x2)的数据帧中分配给该行的先前空白值(预测级别2)的最大有效概率

这不是一个非常复杂的函数,它在较小的数据集上也能很好地工作,但是当我扩展到3-5百万条记录时,它开始花费的时间就太长了。我尝试使用multiprocessing模块以及dask / numba,但是没有任何方法能够改善运行时间(不确定是否仅由于该函数不可矢量化)。

我的问题有两个:

1)是否有更好的方式编写此代码? (我猜有)

2)如果不是,那么哪种并行计算策略可以与这种类型的功能一起工作?我已经尝试了许多不同的python选项,但现在我更倾向于在完全独立的计算机上运行较大的数据集。随意提供任何建议的代码来并行化类似的东西。预先感谢您提供的任何指导。

l2 = MNB.predict_proba(test_x)
l2_classes = MNB.classes_
L2 = pd.DataFrame(l2, columns = MNB.classes_)
test_x2["Predicted Level 2"] = ""

def predict_2(row):
    s = row["Predicted Level 1"]
    s = GST.loc[s,:]
    s.reset_index(inplace = True)
    Valid_Level2s = s["GST Level 2"].tolist()
    p2 = L2.ix[row.name, Valid_Level2s]
    max2 = p2.idxmax(axis = 1)
    output = row["Predicted Level 2"] = max2
    return row

test_x2 = test_x2.apply(predict_2, axis = 1)

0 个答案:

没有答案