用R或Python

时间:2016-03-16 11:02:30

标签: r loops for-loop join dataframe

我有两张桌子 - Price_listorder_listprice_list表格为product_id提供了所有商店中所有商店的日期活动价格。虽然order_list给了我下订单的清单,即下订单的人以及从哪个商店下单。

  

Price_list - date,product_id,store_id,selling_price

     

order_list - date,product_id,store_id,selling_price,order_id,email,product_order_id(唯一键 - product_id和order_id的连接,因为订单中可能有多个产品)

我希望以这样的方式组合上述两个表:对于每个product_order_id,我得到一个可用于该产品的所有价格的列表。基本上我想知道可用的价格是什么以及客户选择了什么。下表说明了我的查询。

|product_order_id    Date     product_id    store_id   selling_price  Placed|
|134323_3545       2016/03/11    134323         6433       2560.00     Yes |
|134323_3545       2016/03/11    134323         6343       2534.00     No  |
|134323_3545       2016/03/11    134323         1243       2313.00     No  |
|134323_3545       2016/03/11    134323         2424       2354.00     No  |
|145565_9965       2016/03/11    145565         9887       5432.00     No  |
|145565_9965       2016/03/11    145565         7645       5321.00     Yes |

我无法在R中解决这个问题。虽然我更喜欢R,但如果在mysql或python中有解决方案,我是开放的。完成此操作的步骤是(a)在product_order_id中为每个product_id选择product_order_id(B),搜索price_list(C)中的所有条目,将其附加到表中,并添加指定product_order_id的列,此列表适用于(d )重复下一个product_order_id的步骤。准备好数据帧后,我可以在列(product_order_id)上保留连接order_list表以获取最终的数据帧。我还没有掌握如何在R中做到这一点。

在阅读了关于循环和一些帮助之后,我能够创建一个循环来搜索一天中每个product_id的所有价格条目(product_date是date和product_id的串联):

datalist <- list()
for(i in (orderlisit_test$product_date){
  dat <- filter(pricelist, pricelist$product_date==i)
  datalist[[i]] <- dat
}

big_data = do.call("rbind", datalist)

但是,我还想添加另一列,指定每次迭代的order_id或product_order_id。所以,如果有人能帮助我,我应该如何循环以及同时添加另一个列,这将对我有很大的帮助。

1 个答案:

答案 0 :(得分:0)

这将保留每个product_id的所有行

library(dplyr)
order_list_joined<-full_join(Price_list,order_list,by="product_id")

如果给定的product_id没有order_id,我们假设没有订单地点。

order_list_joined<-order_list_joined %>% mutate(Placed = ifelse(is.na(order_id),"No","Yes")