2016-11-14 3 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になります。

関連する問題