2015-05-20 30 views
5

Tôi có một bộ đếm thời gian được lưu trữ trong một khung dữ liệu gấu trúc với một datetimeindex. Bây giờ tôi muốn xác định khoảng trống trong bộ đếm thời gian để xác định các phân đoạn liên tục để xử lý chúng riêng lẻ (và trong một số trường hợp dán các đoạn với nhau với khoảng cách đủ ngắn giữa chúng).Tìm khoảng trống dữ liệu (không điền) trong gấu trúc?

Có hai cách chính tôi có thể thấy để thực hiện việc này. Đầu tiên là lập chỉ mục lại bằng cách sử dụng các cách tiếp cận khác nhau để có được một khoảng thời gian thông thường và quan sát các giá trị NA đã điền trong các vùng khoảng cách. Trong trường hợp của tôi dẫn đến nhiều hàng bổ sung (nghĩa là một số khoảng trống dài). Sau đó, bạn vẫn cần thực hiện thêm một bước để xác định các phân đoạn liên tục.

Cách tiếp cận khác và những gì tôi hiện đang sử dụng, là sử dụng np.diff để phân biệt chỉ mục và tìm khoảng trống bằng np.where. Nhưng liệu có một cách tiếp cận gấu trúc bản địa hơn cho điều này? Điều này có vẻ như một nhiệm vụ khá phổ biến. Tôi lưu ý có vấn đề với np.diff và gấu trúc với một số kết hợp của các phiên bản gumpy và gấu trúc nên một giải pháp chỉ gấu trúc sẽ là thích hợp hơn.

Điều gì sẽ là hoàn hảo sẽ là một cái gì đó giống như

for segment in data.continuous_segments(): 
    # Process each segment 

cho dữ liệu dataframe.

+0

Tôi nghĩ rằng đây có thể là một nơi tốt để bắt đầu: http://stackoverflow.com/questions/22290793/fill-na-values-in-pandas-series - có một điểm dừng –

Trả lời

3

Điều này có thể làm việc cho bạn:

df = pd.DataFrame([["2015-01-01",1],["2015-01-02",1],[np.nan,1],[np.nan,1],["2015-01-10",1],["2015-01-11",1]], columns = ['timestamp','value']) 

continuous_segments = df[df.timestamp.notnull()].groupby(df.timestamp.isnull().cumsum()) 

for segment in continuous_segments: 
    print (segment[1]) 

    timestamp value 
0 2015-01-01  1 
1 2015-01-02  1 
    timestamp value 
4 2015-01-10  1 
5 2015-01-11  1 
Các vấn đề liên quan