2016-11-14 20 views

回答

0

這樣的事情?

x=[3,5,-7,5,10,-8,-9,3] 
index=0 

for i in x[:-2]: 
    if i > 0 and x[index+1] < 0 and x[index+2] < 0: 
     print i 
    index += 1 
1

IIUC你能做到這樣:

In [244]: df 
Out[244]: 
    GDP_Change 
0   1 
1   -12 
2   -13 
3   -14 
4   5 
5   5 
6   -3 
7   -4 
8   6 
9   -1 

In [245]: df[(df.GDP_Change>=0) & (df.GDP_Change.shift(-1)<0) & (df.GDP_Change.shift(-2)<0)] 
Out[245]: 
    GDP_Change 
0   1 
5   5 
1

下面是使用convolution搭上模式基於NumPy的矢量化解決方案 -

In [503]: df 
Out[503]: 
    GDP_Change 
0  0.741415 
1  0.058691 
2 -0.270648 
3  0.929434 
4 -0.717600 
5 -0.617052 
6  1.365104 
7  1.796394 
8 -1.634185 
9 -0.147893 
10 0.215784 
11 -1.228324 
12 1.412208 
13 0.660015 
14 0.070062 
15 0.613411 
16 -0.595652 
17 -1.849354 
18 -1.542668 
19 0.587222 

In [504]: df.iloc[np.convolve(np.sign(df['GDP_Change']),[-1,-1,1],'valid')==3] 
Out[504]: 
    GDP_Change 
3  0.929434 
7  1.796394 
15 0.613411 

注意,作爲內核模式卷積翻轉:[-1,-1,1],因爲這是convolution如何通過滑動輸入數據通過另一個方向。然後,我們尋找匹配的最大卷積和,在這種情況下將爲3

相關問題