2017-04-07 22 views
0

我有一個商店和產品的商店舉行活動表。我正在嘗試使用Python計算產品之間偷竊事件之間的平均天數。我的表看起來像這樣:如何根據類別1和類別2計算事件之間的平均天數

Product Store Shoplifting date Times shoplifted 
1   A  8/28/2016   6 
2   A  8/28/2016   6 
3   A  8/28/2016   6 
2   B  8/22/2016   3 
1   B  8/22/2016   3 
3   B  8/22/2016   3 
1   C  8/18/2016   2 
3   C  8/18/2016   2 
4   C  8/18/2016   2 
1   A  8/18/2016   5 
3   A  8/18/2016   5 
1   B  8/16/2016   2 
1   A  8/14/2016   4 
4   C  8/13/2016   1 
3   A  8/12/2016   4 
2   A  8/12/2016   4 

產品1從商店被偷的8/28,8/18,8/14和(10天盜竊之間4天)和B店在8/22和8/16(8天),平均爲(10 + 4 + 8)/ 3 = 7.33天。因此,對於產品1預期的結果將是:

Product Days between shoplifting 
1   7.33 

「時代shoplifted」列是商店被盜竊的累計次數。隨着每次偷竊事件的增加,它都會增加。因此,舉例來說,在2016年8月28日,商店A被盜竊了物品1,2和3.這是商店第六次被盜竊。

我正試着計算偷竊商品之間的平均天數。我一直在寫很多for循環,並且它變得非常混亂,所以我想要一個更乾淨的方式來做到這一點。我對熊貓不太熟悉,但我確實相信它有一些方便的時間處理能力......?你如何解決熊貓這個問題?或者,還有更好的方法?

回答

1

我首先按Shoplifting date對數據框進行排序,然後對於每個組,diff會給你時間增量,而mean會使它們平均。

df.sort_values('Shoplifting date').groupby(
    'Product' 
)['Shoplifting date'].apply(lambda x: x.diff().mean()).dropna() 

Product 
1  0 days 
3  0 days 
582 10 days 
650 4 days 
Name: Shoplifting date, dtype: timedelta64[ns] 
+0

這幾乎是我所需要的,但並不完全。它還需要考慮商店。在我發佈的摘錄中,沒有從同一商店竊取同一物品的重複內容,但它確實發生在數據的深處。例如,假設商品1從商店A被盜,並在10天后從商店A再次被盜。在B店,兩次間隔6天被盜。所以平均會是8天。它在A店和B店盜竊的時間無關緊要。 – Greg

+1

@Greg當你沒有發表你想看到的結果的例子時,你也很難發佈足夠的數據來證明主要問題。 – piRSquared

+0

對不起,我意識到它很混亂。我認爲我對這件事感到厭煩。該表超過100萬行,我找不到任何合適的部分來提取,但我知道它在某處。我會四處挖掘,看看我能否更清楚。謝謝你的幫助。 – Greg

相關問題