2016-08-03 2 views
0

나는 다음과 같은 시리즈를 가지고있다. 나는 "test"라는 자체 정의 함수를 롤 적용하고 결과를 s로 즉시 업데이트하여 "test"의 다음 반복이 업데이트 된 s를 기반으로하도록한다. 내 예를 들어 설명해 드리겠습니다.팬더 롤링이 다음 반복을 위해 시리즈 업데이트에 적용됩니까?

s = pd.Series(range(5), index=pd.date_range('1/1/2000', periods=5)) 
s 
2000-01-01 0 
2000-01-02 1 
2000-01-03 2 
2000-01-04 3 
2000-01-05 4 
Freq: D, dtype: int32 

다음과 같이 자체 정의 된 기능이 있습니다. 이것은 실제 사례의 단순한 예입니다. 첫 번째 반복에서 반환 된 변수 'update'가 100으로 설정되어 있고 s를 [0, 1, 100, 3, 4, ...]로 업데이트하려고합니다. 다음 반복의 경우 arr.sum()은 (1 + 2 + 3) 대신 (1 + 100 + 3)을 기반으로 계산됩니다.

def test(arr): 
    print(arr) 
    print(arr.sum()) 
    if arr.sum()%3==0: 
     print('True') 
     update=100 
    else: 
     update=arr[-1] 
    return update 
s=s.rolling(window=3).apply(test) 

[ 0. 1. 2.] 
3.0 
True 
[ 1. 2. 3.] 
6.0 
True 
[ 2. 3. 4.] 
9.0 
True 

이상적인 출력 :

[ 0. 1. 2.] 
3.0 
True 

'Update s with 100' 
[ 1. 100. 3.] 
104 

[ 100. 3. 4.] 
107 

답변

0

내가 dataframe.rolling 원래 dataframe에서 작동 생각 만 실제로 롤링 변환을 제공합니다. 데이터 프레임의 롤 창에서 수정 된 데이터는 롤링 결과 창에서 업데이트되지 않습니다.

사실 나는 여기 같은 문제에 직면하고 있습니다. 지금까지 내가 사용하고있는 대안은 각 롤링 윈도우를 수동으로 반복하여 루프 내부에 로직을 넣는 것입니다. 나는 그것이 느리다는 것을 안다. 그러나 나는 이것을 할 수있는 더 좋은 방법이 있는지 전혀 모른다.

BTW, 같은 질문은 다른 사람에 의해 요구된다 Sliding window iterator using rolling in pandas

Why doesn't my pandas rolling().apply() work when the series contains collections?

관련 문제