Python 特定于计数的统计数据
我在pandas中有一个数据帧,看起来像这样:Python 特定于计数的统计数据,python,pandas,Python,Pandas,我在pandas中有一个数据帧,看起来像这样: | index | order_id | product_id | user_id | days_since_prior_order | order_number | |-------|----------|------------|---------|------------------------|--------------| | 0 | 177 | 21903 | 48308 | 8.0
| 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 |
这不是完整的数据集,只是表的一小部分。
我想做的是为每个用户计算产品重新订购之间的平均天数。因此,对于每个用户,我们接受包含特定产品标识的所有订单,然后计算这些订单之间的时间(包括没有此产品的其他订单)((我们使用订单号确定订单的订单))并取平均值。我想用pandas来做这件事,因为数据集非常大,我没有太多的RAM和资源来使用经典的python代码来计算。我该怎么做
编辑:
我似乎不够清楚。我想要的是,当用户多次订购一个产品时,计算该产品订单之间的天数,并计算每个产品Id的平均值。所以我想知道该产品多久订购一次
编辑2:
我为一个用户制作了一个csv,以便您可以查看此df的外观:
编辑3:“自上次订单起的天数”仅为用户此订单与上次订单之间的天数。问题是,中间可能是没有特定产品的订单。您希望使用数据帧的groupby方法
df.groupby(['user_id','product_id'])['days_since_prior_order'].mean()
将返回客户订购的每个产品id的每个唯一用户id自上次订购以来的平均时间。不确定您到底想要什么,但类似于
df.groupby(['user_id','product_id'])['days_since_prior_order'].mean()
你在这里发布的样品不包含任何“再订购”我想?根据我的经验,使用pandas并不能节省任何内存(事实上,对于pivot这样的操作,它可能会变得更糟)。@Mephy我相信它比我编写的任何代码都更优化;)这张表只是一个例子。我不能在这里发布整个数据集。这个想法是用户可以多次订购产品,我想知道在这两次订购之间经过了多少天。我发现令人困惑的是,自上次订购以来的天数对于每个(用户、产品对)来说似乎是恒定的。。。你能提供一个更相关的例子吗?@FLab它们在订单号和订单号之间并不是常数。我会尝试找到更相关的。这只会给我列的平均值