Python 数据帧应用非常慢
我正在尝试添加一个二进制变量,它告诉我们,在过去的5个订单中,产品是否在上一个订单中,以及之前的订单,等等。我提出了以下数据帧表达式。它确实做了它应该做的事情,但速度非常慢。我可能做错了什么 这是我的数据框:Python 数据帧应用非常慢,python,pandas,dataframe,lambda,apply,Python,Pandas,Dataframe,Lambda,Apply,我正在尝试添加一个二进制变量,它告诉我们,在过去的5个订单中,产品是否在上一个订单中,以及之前的订单,等等。我提出了以下数据帧表达式。它确实做了它应该做的事情,但速度非常慢。我可能做错了什么 这是我的数据框: order_id user_id order_number product_id us_last_order_number 2539329 1 1 196 10 2539329 1 1 14084 10 2539329 1 1 12427 10
order_id user_id order_number product_id us_last_order_number
2539329 1 1 196 10
2539329 1 1 14084 10
2539329 1 1 12427 10
2539329 1 1 26088 10
2539329 1 1 26405 10
2398795 1 2 196 10
2398795 1 2 10258 10
2398795 1 2 12427 10
2398795 1 2 13176 10
2398795 1 2 26088 10
2398795 1 2 13032 10
473747 1 3 196 10
473747 1 3 12427 10
473747 1 3 10258 10
473747 1 3 25133 10
473747 1 3 30450 10
2254736 1 4 196 10
2254736 1 4 12427 10
2254736 1 4 10258 10
2254736 1 4 25133 10
2254736 1 4 26405 10
431534 1 5 196 10
431534 1 5 12427 10
431534 1 5 10258 10
431534 1 5 25133 10
431534 1 5 10326 10
431534 1 5 17122 10
431534 1 5 41787 10
431534 1 5 13176 10
3367565 1 6 196 10
tmp2 = priors_orders_detail.groupby(['user_id',
'product_id']).apply(lambda x: [1 if item in x.order_number.tolist() else -1 if item<0 else 0 for item in range(x.us_last_order_number.iloc[0],x.us_last_order_number.iloc[0]-5,-1)])
tmp2= pd.DataFrame(tmp2).reset_index()
tmp2.columns.values[-1]='present_in_orders' tmp2[['in_orders_1','in_orders_2',
'in_orders_3','in_orders_4',
'in_orders_5']] = pd.DataFrame([x for x in tmp2.present_in_orders]) tmp2.drop('present_in_orders',axis=1,inplace=True)
订单号用户号订单号产品号美国号上次订单号
2539329 1 1 196 10
2539329 1 1 14084 10
2539329 1 1 12427 10
2539329 1 1 26088 10
2539329 1 1 26405 10
2398795 1 2 196 10
2398795 1 2 10258 10
2398795 1 2 12427 10
2398795 1 2 13176 10
2398795 1 2 26088 10
2398795 1 2 13032 10
473747 1 3 196 10
473747 1 3 12427 10
473747 1 3 10258 10
473747 1 3 25133 10
473747 1 3 30450 10
2254736 1 4 196 10
2254736 1 4 12427 10
2254736 1 4 10258 10
2254736 1 4 25133 10
2254736 1 4 26405 10
431534 1 5 196 10
431534 1 5 12427 10
431534 1 5 10258 10
431534 1 5 25133 10
431534 1 5 10326 10
431534 1 5 17122 10
431534 1 5 41787 10
431534 1 5 13176 10
3367565 1 6 196 10
tmp2=priors\u orders\u detail.groupby(['user\u id',
'产品id'])。应用(lambda x:[1,如果x.order\u number.tolist()中的项目)else-1如果项目我不理解整个问题…你能说得更清楚一点吗…用户id为1和产品id为196在所有的五个订单中都存在,但是输出的前四列都是0,而in_orders_5是1。你能解释一下我们最后的订单号吗?你能添加一个你想看到的示例,即结果吗你不想要吗?