2017-12-08 3 views
0

다음 데이터 프레임에서 모든 ID에 대해 마지막 두 개의 '시간'기간 동안 X의 롤링 합계가 필요합니다.각 ID마다 개별적으로 롤링 윈도우 표시

df = pd.DataFrame({'ID':[1000, 1000, 1000, 2000, 2000, 2000, 3000,3000,3000], 
       'Time':[1,2,3,1,2,3,1,2,3], 
       'X':[101, 201, 123, 234, 222, 333, 444, 0, 0 ]}) 

다음 코드를 시도했지만 고객 ID가 '1000'에서 '2000'까지 이월 된 롤링 합계가 발생했습니다.

df[['X']].rolling(2).sum() 

답변

1

IIUC :

In [190]: df['new'] = df.groupby('ID', as_index=False)['X'].rolling(2).sum().reset_index(level=0, drop=True) 

In [191]: df 
Out[191]: 
    ID Time X new 
0 1000  1 101 NaN 
1 1000  2 201 302.0 
2 1000  3 123 324.0 
3 2000  1 234 NaN 
4 2000  2 222 456.0 
5 2000  3 333 555.0 
6 3000  1 444 NaN 
7 3000  2 0 444.0 
8 3000  3 0 0.0