मेरे पास टाइम-सीरीज़ डेटा का एक बड़ा पांडा डेटाफ्रेम है।पांडस डेटाफ्रेम पर स्लाइडिंग विंडो
मैं वर्तमान में इस डेटाफ्रेम को एक नया, छोटा डेटाफ्रेम बनाने के लिए उपयोग करता हूं जो प्रत्येक 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() तरीकों का उपयोग कर सुझाव दे सकता है, लेकिन यदि ऐसा है तो, मैं कैसे खिड़की ओवरलैप के साथ इस सुविधा का उपयोग करने के लिए नहीं देख सकता।
किसी भी मदद की बहुत सराहना की जाएगी।
'डीएफ [4 :: 5]' - वह शानदार है! – MaxU
@ मैक्सयू मैं अब तक नहीं जाऊंगा, लेकिन धन्यवाद! – JohnE
क्या यह कम्प्यूटेशनल पावर का अपशिष्ट नहीं होगा? मान लें कि मेरे पास 64 नमूना विंडोज़ पर 50% ओवरलैप है, इसलिए मूल रूप से मैं केवल 1/32 काम का उपयोग कर रहा हूं। बेशक, यह आलसी मूल्यांकन किया जाता है, बेशक। –