2016-09-22 4 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

난 당신이 stack으로 unstack에 의해 누락 된 값을 추가 aggregate 다음 mean에 의해 size와 필요가 있다고 생각합니다.

레벨을 변경해야하는 경우 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