2016-07-20 6 views
6

팬더 데이터 프레임이 0,1, -1로 구성되어 있습니다.팬더 데이터 프레임의 이벤트 감지

import pandas as pd 
df=pd.DataFrame({'indicator':[0, 0, 0, -1,0,0,1,0,-1,1,0,-1,0,1]}) 

가 나는 -1 일부 또는 없음 +1 제로와 이어 지도록 모든 -1 (1)의 인덱스를 찾는 wan't. 위의 예에서 exapmle를 들어 내가

[(3,6),(8,9),(11,13)] 
+0

안녕을 얻으려면,이 (당신이 문자열이 있다면) 정규 표현식은 매우 좋은 솔루션이 될 것입니다있는 구문 분석 문제처럼 보인다. 데이터 프레임 값을 반복하고 다음 값을 확인해야합니다. –

답변

5
s = pd.DataFrame({'indicator':[0, 0, 0, -1, 0, 
           0, 1, 0, -1, 1, 
           0, -1, 0, 1]}).squeeze() 

# reduce it to non-zeros 
s1 = s[s!=0] 
# must be -1 and next one be 1, grab index 
idx = s1.loc[(s1 == -1) & (s1 != s1.shift(-1))].index 
# grab s1 index and next index 
s2 = s1.index.to_series().shift(-1).loc[idx].astype(int) 
# zip to get tuples 
zip(s2.index, s2.values) 

[(3, 6), (8, 9), (11, 13)] 
+0

분명히 배울 점이 많은 팬더를 포함하고있는 매우 일반적인 솔루션입니다. – Ohumeronen

+0

제 아름다운 대답을 삭제했습니다 .-- (당신이 옳았으며 작성자가 데이터에서 연속 1과 -1을 가졌습니다.) 지적 해 주셔서 감사합니다. – Ohumeronen

+0

@Ohmeronen 좋은 대답이었습니다. 내가 무례하게 생각하지 않았 으면 좋겠다. 나는 단지 내가 본 것을 지적하고 싶었다. – piRSquared

관련 문제