2013-06-07 9 views
-1

I 다음 DataFrame이 다음 기능으로팬더 : TimeGrouper 주파수 불일치

df = pd.DataFrame({ 
'Buyer': 'Carl Mark Carl Joe Joe Carl'.split(), 
'Quantity': [1,3,5,8,9,3], 
'Date' : [ 
    DT.datetime(2013,9,1,13,0), 
    DT.datetime(2013,9,1,13,5), 
    DT.datetime(2013,10,1,20,0), 
    DT.datetime(2013,10,3,10,0), 
    DT.datetime(2013,12,2,12,0),          
    DT.datetime(2013,12,2,14,0), 
    ]}) 

df = df.set_index('Date', drop=False) 

:

     Buyer    Date Quantity cum_sum 
Date                 
2013-09-01 13:00:00 Carl 2013-09-01 13:00:00   1  4 
2013-09-01 13:05:00 Mark 2013-09-01 13:05:00   3  4  
2013-10-01 20:00:00 Carl 2013-10-01 20:00:00   5  25 
2013-10-03 10:00:00 Joe 2013-10-03 10:00:00   8  25 
2013-12-02 12:00:00 Joe 2013-12-02 12:00:00   9  25 
2013-12-02 14:00:00 Carl 2013-12-02 14:00:00   3  25 

방법이 가능하다 I 출력을 얻을

def f(frame): 
    cum_sum = 0 
    if (len(frame) > 0): 
     cum_sum = frame.Quantity.sum() 
    frame['cum_sum'] = cum_sum 
    return frame 

x1 = df.groupby(pd.TimeGrouper('20M')).apply(f) 

을 그 처음 두 행의 cum_sum이 25가 아닌가? TimeGrouper 함수에서 'A'를 연간 한정 기호로 사용하면 처음 두 행의 cum_sum이 올바르게 계산됩니까?

는 오타 ... BTW, 그렇지 않으면 첫 번째 빈을 포함 (그래서 그것을 다른 그룹), 하지 않습니다, 당신은 시간 그룹화에 closed='left'를 추가 할 필요가 당신에게

앤디

+0

당신의 코드 샘플 정보/데이터/코드 누락 얻을 것으로 보인다 : 예를 들어 당신의 DF에는 지점 데이터가 없습니다. 귀하가 제공 한 코드 샘플을 실행한다고해서 귀하와 동일한 결과가 나오지는 않습니다. 그것을 고칠 수 있습니까? – Boud

+0

안녕하세요, Boud, 죄송합니다. 일부 복사 - 붙여 넣기 문제가있었습니다. 코드를 업데이트했습니다. – Andy

답변

1

감사합니다 함수에 : cum_sum하지 sum_sum

(Pdb) df.groupby(TimeGrouper('20M',closed='left')).apply(f) 
        Buyer    Date Quantity cum_sum 
Date                
2013-09-01 13:00:00 Carl 2013-09-01 13:00:00   1  29 
2013-09-01 13:05:00 Mark 2013-09-01 13:05:00   3  29 
2013-10-01 20:00:00 Carl 2013-10-01 20:00:00   5  29 
2013-10-03 10:00:00 Joe 2013-10-03 10:00:00   8  29 
2013-12-02 12:00:00 Joe 2013-12-02 12:00:00   9  29 
2013-12-02 14:00:00 Carl 2013-12-02 14:00:00   3  29 
+0

대단히 고마워요! – Andy