2016-04-29 10 views
5

मेरे पास टाइम-सीरीज़ डेटा का एक बड़ा पांडा डेटाफ्रेम है।पांडस डेटाफ्रेम पर स्लाइडिंग विंडो

मैं वर्तमान में इस डेटाफ्रेम को एक नया, छोटा डेटाफ्रेम बनाने के लिए उपयोग करता हूं जो प्रत्येक 10 पंक्तियों का औसत रोलिंग करता है। यानी एक रोलिंग विंडो तकनीक।

def create_new_df(df): 
    features = [] 
    x = df['X'].astype(float) 
    i = x.index.values 
    time_sequence = [i] * 10 
    idx = np.array(time_sequence).T.flatten()[:len(x)] 
    x = x.groupby(idx).mean() 
    x.name = 'X' 
    features.append(x) 
    new_df = pd.concat(features, axis=1) 
    return new_df 

परीक्षण करने के लिए कोड:: इस तरह

columns = ['X'] 
df_ = pd.DataFrame(columns=columns) 
df_ = df_.fillna(0) # with 0s rather than NaNs 
data = np.array([np.arange(20)]*1).T 
df = pd.DataFrame(data, columns=columns) 

test = create_new_df(df) 
print test 

आउटपुट:

 X 
0 4.5 
1 14.5 

हालांकि, मैं समारोह एक 50% के साथ एक स्लाइडिंग खिड़की का उपयोग कर नए dataframe बनाना चाहते ओवरलैप

तो आउटपुट इस तरह दिखेगा:

 X 
0 4.5 
1 9.5 
2 14.5 

मैं यह कैसे कर सकता हूं?

यहाँ मैं क्या करने की कोशिश की है या नहीं:

from itertools import tee, izip 

def window(iterable, size): 
    iters = tee(iterable, size) 
    for i in xrange(1, size): 
     for each in iters[i:]: 
      next(each, None) 
    return izip(*iters) 

for each in window(df, 20): 
    print list(each) # doesn't have the desired sliding window effect 

कुछ भी पांडा rolling_mean() तरीकों का उपयोग कर सुझाव दे सकता है, लेकिन यदि ऐसा है तो, मैं कैसे खिड़की ओवरलैप के साथ इस सुविधा का उपयोग करने के लिए नहीं देख सकता।

किसी भी मदद की बहुत सराहना की जाएगी।

उत्तर

5

मुझे लगता है कि पांडा रोलिंग तकनीक ठीक है। ध्यान दें कि पांडा के संस्करण 0.18.0 से शुरू होने पर, आप rolling_mean() के बजाय rolling().mean() का उपयोग करेंगे।

>>> df=pd.DataFrame({ 'x':range(30) }) 
>>> df = df.rolling(10).mean()   # version 0.18.0 syntax 
>>> df[4::5]        # take every 5th row 

     x 
4 NaN 
9 4.5 
14 9.5 
19 14.5 
24 19.5 
29 24.5 
+2

'डीएफ [4 :: 5]' - वह शानदार है! – MaxU

+0

@ मैक्सयू मैं अब तक नहीं जाऊंगा, लेकिन धन्यवाद! – JohnE

+1

क्या यह कम्प्यूटेशनल पावर का अपशिष्ट नहीं होगा? मान लें कि मेरे पास 64 नमूना विंडोज़ पर 50% ओवरलैप है, इसलिए मूल रूप से मैं केवल 1/32 काम का उपयोग कर रहा हूं। बेशक, यह आलसी मूल्यांकन किया जाता है, बेशक। –

संबंधित मुद्दे