2016-07-20 39 views
6

Tôi có khung dữ liệu gấu trúc gồm 0,1, -1.Phát hiện sự kiện trong khung dữ liệu gấu trúc

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

và tôi không tìm thấy chỉ mục của mỗi -1 và 1 sao cho -1 được theo sau bởi một số hoặc không có số không và +1. Đối với exapmle trong ví dụ trên tôi muốn nhận được

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

Hi, điều này có vẻ như một vấn đề phân tích cú pháp mà biểu thức thông thường sẽ là một giải pháp rất tốt (nếu bạn đã có một chuỗi). Tôi e rằng bạn sẽ phải lặp qua các giá trị dataframe và kiểm tra các giá trị sau. –

Trả lời

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

Chắc chắn là một giải pháp rất chung chung, có chứa rất nhiều thứ gấu trúc tôi vẫn muốn học :-) – Ohumeronen

+0

Tôi đã xóa câu trả lời hay của tôi ;-(bạn đã đúng và tác giả đã liên tiếp 1s và -1 trong dữ liệu. – Ohumeronen

+0

@Ohumeronen Đó là một câu trả lời hay, hy vọng bạn không nghĩ rằng tôi đã trở nên bất lịch sự, tôi chỉ muốn chỉ ra những gì tôi đã thấy – piRSquared

Các vấn đề liên quan