2017-04-07 5 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/22に8/28、8/18、および8/14(10日と盗難の間に4日間)にし、ストアBからA店から盗まれました8/16(8日)、平均(10 + 4 + 8)/ 3 = 7.33日であった。だから、製品1のために期待される結果は次のようになります。

Product Days between shoplifting 
1   7.33 

「タイムズは万引き」の欄には、ストアが万引きされた回数の累積数です。それは、万引きイベントごとに増加します。したがって、たとえば、8/28/2016年に、店Aは1番、2番、3番のアイテムを盗まれました。店が万引きされたのは6回目です。

商品による万引きの平均日数を計算しようとしています。私はループのためにたくさんのことを書いてきましたし、それはかなり面倒なので、私はそれを行うためのよりクリーンな方法を望んでいます。私はパンダにはそれほど精通していませんが、それはいくつかの便利な時間処理能力を持っていると信じています...?パンダでこの問題をどうやって解決しますか?それとも良い方法がありますか?

答えて

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日間で2度盗まれました。したがって、平均は8日間になります。店舗Aと店舗Bの間の盗難はまったく関係ありません。 – Greg

+1

@Greg結果として見たいものの例を投稿しておらず、主な問題を示すために十分なデータを投稿していないと、難しいです。 – piRSquared

+0

すみません、混乱していると思います。私はこれについて私の頭の中にいると思う。テーブルの長さは100万行を超えており、抽出するのに適したセクションは見つかりませんが、どこかにあることがわかります。私は周りを掘り下げて、私がそれをもっと明確にすることができるかどうかを見ます。ご協力いただきありがとうございます。 – Greg

関連する問題