如何将自定义函数应用到df的每一个元素上呢,其中每个元素的行列索引分别是自定义函数的两个参数,请问有没有除了for循环以外的方法呢?

问题遇到的现象和发生背景

我自定义了一个函数,函数有俩参数,分别是df的行列索引;现在我需要把这个自定义函数应用到df的每一个元素上,由于数据量较大(大约8500*14000)的矩阵,for循环的性能不太好,现寻求其他解决方法~

问题相关代码,请勿粘贴截图

1.我的自定义函数如下

def ubcf(userid,orderid):
    ubcf_value = (((pre_order_prefer.loc[neigh_set[userid][1:],orderid] - pre_order_prefer.loc[userid,orderid])* compre_sim.loc[userid,neigh_set[userid][1:]]).sum())/(compre_sim.loc[userid,neigh_set[userid][1:]]).sum()
    return ubcf_value

其中pre_order_prefer是行索引为userid、列索引为orderid的df,compre_sim是行列索引都是userid的df(表示所有userid的相似度矩阵)。
2.新建一个df,行索引为userid,列索引为orderid,我需要将每一个元素df.loc[userid,orderid]修改为ubcf(userid,orderid)。因数据量大不想用for循环,自己想尝试apply函数,但是没成功。

运行结果及报错内容
我的解答思路和尝试过的方法

按照最笨的办法循环应该是这样的:

for index in a.index:
    for columns in a.columns:
        a.loc[index,columns] = ubcf(index,columns)

但奈何数据量太大,有没有时间快些的达到同样效果的方法嘞?感谢!

我想要达到的结果
df=pre_order_prefer.applymap(ubcf(userid,orderid))

其实我完全看不懂你的需求,大概这个函数可行吧

列表推导式可以吗,或者打包函数zip

使用numpy的矩阵试试,矩阵对解决大型数据的性能提高相当明显

applymap函数可以去看看

我觉得你可以仿照map函数的构造方法,数据量大能用列表推导用推导,能用生成器用生成器,

没有题目,优化算法 的情况下,
尝试优化ubcf(arg1, arg2)方法,查找重复计算部分且尝试动态规划或缓存的可能性。