通过连接加快Python for loop的替代方法

时间:2019-02-01 17:42:34

标签: python pandas loops join merge

我正在处理一个大型数据框(大约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)

关于如何重新设计或提高性能的任何想法?

0 个答案:

没有答案