我在pandas中有DataFrame,如下所示:
| index | order_id | product_id | user_id | days_since_prior_order | order_number |
|-------|----------|------------|---------|------------------------|--------------|
| 0 | 177 | 21903 | 48308 | 8.0 | 27 |
| 1 | 177 | 40723 | 48308 | 8.0 | 27 |
| 2 | 177 | 27531 | 48308 | 8.0 | 27 |
| 3 | 177 | 1158 | 48308 | 8.0 | 27 |
| 4 | 177 | 37766 | 48308 | 8.0 | 27 |
| 5 | 177 | 48299 | 48308 | 8.0 | 27 |
| 6 | 177 | 46802 | 48308 | 8.0 | 27 |
| 7 | 177 | 38159 | 48308 | 8.0 | 27 |
| 8 | 177 | 35055 | 48308 | 8.0 | 27 |
| 9 | 177 | 40311 | 48308 | 8.0 | 27 |
| 10 | 177 | 5022 | 48308 | 8.0 | 27 |
| 11 | 177 | 19906 | 48308 | 8.0 | 27 |
| 12 | 177 | 29987 | 48308 | 8.0 | 27 |
| 13 | 177 | 9076 | 48308 | 8.0 | 27 |
| 14 | 177 | 43352 | 48308 | 8.0 | 27 |
| 15 | 177 | 33731 | 48308 | 8.0 | 27 |
| 16 | 177 | 24852 | 48308 | 8.0 | 27 |
| 17 | 220 | 3919 | 63952 | 6.0 | 26 |
| 18 | 220 | 11432 | 63952 | 6.0 | 26 |
| 19 | 220 | 14992 | 63952 | 6.0 | 26 |
| 20 | 378 | 13249 | 128710 | 2.0 | 66 |
| 21 | 378 | 43693 | 128710 | 2.0 | 66 |
| 22 | 946 | 1529 | 157339 | 3.0 | 10 |
| 23 | 946 | 20734 | 157339 | 3.0 | 10 |
| 24 | 946 | 22935 | 157339 | 3.0 | 10 |
| 25 | 946 | 26728 | 157339 | 3.0 | 10 |
这不是完整的数据集,只是表格的一小部分。 我想要做的是计算每个用户的产品重新订购之间的平均天数。因此,对于每个用户,我们获取包含特定product_id的所有订单,然后计算这些订单之间的时间(包括没有此产品的其他订单)((我们使用order_number来确定订单的订单))然后取平均值。我想用pandas做,因为数据集非常大,我没有太多的RAM和资源来使用经典的python代码来计算它。我怎么能这样做?
编辑: 我似乎不够清楚。我想要的是当用户多次订购产品时计算此产品订单之间的天数以及每个产品Id计算的平均值。所以我想知道订购的产品是怎样的。
编辑2: 我为一个用户制作了一个csv,这样你就可以看看这个df的样子:df_for_one_user.csv
编辑3:“days_since_prior_order”只是用户之前和之前订单之间的天数。问题是两者之间可能是没有特定产品的订单。
答案 0 :(得分:0)
您想使用数据帧的groupby方法。
df.groupby(['user_id','product_id'])['days_since_prior_order'].mean()
将返回客户订购的每个产品ID的每个唯一用户ID的先前订单以来的平均时间。
答案 1 :(得分:0)
不确定你想要什么,但与
类似df.groupby(['user_id','product_id'])['days_since_prior_order'].mean()