Python 特定于计数的统计数据

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

我在pandas中有一个数据帧,看起来像这样:

| 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它们在订单号和订单号之间并不是常数。我会尝试找到更相关的。这只会给我列的平均值