我在下面具有此功能,该功能遍历数据帧的每一行(使用大熊猫应用),并通过引用另一个数据帧(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)