我正在处理一个大型数据框(大约700万条记录),需要在其唯一子集上迭代一些值。 我说,我原来的数据帧“DF”已列user_id说明,姓名,地址,日期和产品,而我的子数据帧“S”(这在现实中是30K左右行),是唯一一个列表中的产品“东风”。< / p>
我要找到购买2给出产品的交叉概率(有点什么是推荐算法的使用),但是在这样做,所以我用一组简单的数据操作步骤的循环工作 - 透视表将是不错但数据集似乎太大。
我尝试了一个循环(请参见下面的代码),但是大约有3万次迭代,从我对时间的评论来看,这大约需要48-55小时的计算时间。 除了尝试上述枢轴代码外,这还会使Python崩溃。 我还尝试过使用列表推导和函数,但是性能仅略有提高,没有实际意义。
我的循环是:
out = []
for s in product :
o = pd.DataFrame(df["name"].loc[df["product_code"] == s])
c = pd.merge(df, o, on="name")
d = c.loc[c['product_code']!=i]
product_cts = d.groupby('item_code') ['name'].count().sort_values(ascending=False).reset_index(name ='product_counts')
product_cts["cross_prob"] = product_cts["product_counts"]/len(o)
product_cts["origin_product"] = s
out.append(product_cts)
关于如何重新设计或提高性能的任何想法?