2017-07-06 183 views
0

我有熊貓數據幀,看起來像這樣:Python的大熊貓算具體統計

| 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來確定訂單的訂單)),然後取其平均值。我想用熊貓來做,因爲數據集非常大,我沒有太多的RAM和資源來計算使用傳統的Python代碼。我怎樣才能做到這一點?

編輯: 我似乎不夠清楚。我想要的是當用戶多次訂購產品時,計算這個產品訂單和每個產品Id之間的天數。所以我想知道怎麼是訂購的產品。

編輯2: 我做了一個CSV文件,一個用戶,所以你可以看看這個DF的樣子:df_for_one_user.csv

編輯3:「days_since_prior_order」這和以前的訂單用戶之間的幾天。問題在於可能是沒有特定產品的訂單。

+0

您在此處發佈中不包含任何「重塑」的樣本東西,我覺得呢?根據我的經驗,使用熊貓不會爲您節省任何內存(事實上,對於像pivot這樣的操作它可能會變得更糟)。 – Mephy

+0

@Mephy我相信它會更優化,然後我寫任何代碼;) 此表只是舉例。我無法在這裏發佈整個數據集。這個想法是,用戶可以多次訂購產品,我想知道這些時間之間經過了多少天。 – UpmostScarab

+0

我發現混淆的是days_since_prior_order似乎對每個(用戶,產品對)都是恆定的......你能提供一個更相關的例子嗎? – FLab

回答

0

您想要使用數據框的groupby方法。

df.groupby(['user_id','product_id'])['days_since_prior_order'].mean() 

將返回客戶訂購的每個產品ID的先前每個唯一用戶ID的先後順序的平均時間。

0

不知道你想要什麼,而是類似於

df.groupby(['user_id','product_id'])['days_since_prior_order'].mean() 
+0

這只是給我的意思 – UpmostScarab