2016-09-22 8 views
2

私はパンダを使用して、特定の日のサブスクリプションタイプごとにサブスクライバをグループ化し、その日にサブスクリプションタイプの平均価格を取得しようとしています。私が持っているデータは次のようになります。Pandas groupby datetime、カウントと価格を取得する

Sub_Date    Sub_type Quantity Price 
2011-03-31 00:00:00 3 Month  2   125.00 
        4 Month  0   0.00  # Promo not available this month 
        6 Month  1   250.78  
        12 Month 2   334.70 
2011-04-01 00:00:00 3 Month  2   125.00 
        4 Month  2   145.00  
        6 Month  0   250.78  
        12 Month 0   334.70 
2013-04-02 00:00:00 3 Month  1   125.00 
        4 Month  3   145.00  
        6 Month  0   250.78  
        12 Month 1   334.70 
... 
2015-06-23 00:00:00 3 Month  4   135.12 
        4 Month  0   0.00  # Promo not available this month 
        6 Month  0   272.71  
        12 Month 3   354.12 
... 

私だけ与えられた日付のSub_Type秒の合計数を取得することができるよ:私は似ている何かを得るために探しています

Sub_Date    Sub_Type Price 
2011-03-31 00:00:00 12 Month 331.00 
2012-04-16 00:00:00 12 Month 334.70 
2013-08-06 00:00:00 12 Month 344.34 
2014-08-21 00:00:00 12 Month 362.53 
2015-08-31 00:00:00 6 Month  289.47 
2016-09-03 00:00:00 6 Month  245.57 
2013-04-10 00:00:00 4 Month  148.79 
2014-03-13 00:00:00 12 Month 348.46 
2015-03-15 00:00:00 12 Month 316.86 
2011-02-09 00:00:00 12 Month 333.25 
2012-03-09 00:00:00 12 Month 333.88 
... 
2013-04-03 00:00:00 12 Month 318.34 
2014-04-15 00:00:00 12 Month 350.73 
2015-04-19 00:00:00 6 Month  291.63 
2016-04-19 00:00:00 6 Month  247.35 
2011-02-14 00:00:00 12 Month 333.25 
2012-05-23 00:00:00 12 Month 317.77 
2013-05-28 00:00:00 12 Month 328.16 
2014-05-31 00:00:00 12 Month 360.02 
2011-07-11 00:00:00 12 Month 335.00 
... 

df.Sub_Date.groupby([df.Sub_Date.values.astype('datetime64[D]')]).size() 

これはやや良いスタートですが、正確には必要ではありません。私はパンダサイトでgroupbyのドキュメントを見ましたが、私が望む出力を得ることはできません。

答えて

1

私はあなたがmeansizeaggregateを必要とし、その後stackunstackにより、欠損値を追加すると思います。

また、レベルSub_Typeの変更注文が必要な場合はordered categoricalを使用してください。

#generating all months ('1 Month','2 Month'...'12 Month') 
cat = [str(x) + ' Month' for x in range(1,13)] 
df.Sub_Type = df.Sub_Type.astype('category', categories=cat, ordered=True) 

df1 = df.Price.groupby([df.Sub_Date.values.astype('datetime64[D]'), df.Sub_Type]) 
     .agg(['mean', 'size']) 
     .rename(columns={'size':'Quantity','mean':'Price'}) 
     .unstack(fill_value=0) 
     .stack() 

print (df1) 
         Price Quantity 
      Sub_Type     
2011-02-09 4 Month  0.00   0 
      6 Month  0.00   0 
      12 Month 333.25   1 
2011-02-14 4 Month  0.00   0 
      6 Month  0.00   0 
      12 Month 333.25   1 
2011-03-31 4 Month  0.00   0 
      6 Month  0.00   0 
      12 Month 331.00   1 
+1

どのように動作しますか? – jezrael

+0

テストデータに必要なものを正確に出力します。私は私のメインデータファイルを掃除中です。すばやく返信いただきありがとうございます – Lukasz

関連する問題