2015-05-20 4 views
5

मेरे पास एक डेटाटाइंडेक्स के साथ एक पांडा डेटाफ्रेम में संग्रहीत एक गपी टाइमरीज़ है। अब मैं समय-समय पर प्रक्रियाओं को पहचानने के लिए निरंतर खंडों की पहचान करने के लिए समय-समय पर अंतराल की पहचान करना चाहता हूं (और कुछ मामलों में उनके बीच पर्याप्त पर्याप्त अंतराल वाले खंडों को एक साथ चिपकाएं)।पांडा में डेटा अंतर खोज (भरना नहीं)?

ऐसा करने के लिए दो मुख्य तरीके हैं जिन्हें मैं देख सकता हूं। पहला नियमित समय-समय पर प्राप्त करने के लिए विभिन्न दृष्टिकोणों का उपयोग करके पुन: अनुक्रमणिका करना है और अंतराल क्षेत्रों में भरे एनए मूल्यों का पालन करना है। मेरे मामले में जो कई अतिरिक्त पंक्तियों (यानी कुछ लंबी अंतराल) की ओर जाता है। फिर भी आपको निरंतर सेगमेंट की पहचान करने के लिए एक अतिरिक्त कदम उठाने की आवश्यकता है।

अन्य दृष्टिकोण, और जो मैं वर्तमान में उपयोग कर रहा हूं, वह सूचकांक में अंतर करने के लिए np.diff का उपयोग करना और np.where का उपयोग करके अंतराल ढूंढना है। लेकिन क्या इसके लिए एक और देशी पांडा दृष्टिकोण है? यह एक काफी आम काम की तरह लगता है। मुझे लगता है कि np.diff और पांडा के साथ समस्याएं हैं जो numpy और pandas संस्करणों के कुछ संयोजनों के साथ हैं, इसलिए केवल पांडा केवल समाधान बेहतर होगा।

क्या उचित होगा कुछ की तरह

for segment in data.continuous_segments(): 
    # Process each segment 
dataframe डेटा के लिए

होगा।

+0

मुझे लगता है कि यह एक अच्छी जगह शुरू करने के लिए हो सकता है: http://stackoverflow.com/questions/22290793/fill-na-values-in-pandas-series -साथ एक बंद –

उत्तर

3

यह आप के लिए काम कर सकते हैं:

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 
संबंधित मुद्दे