[![这是我的数据框] [1]] [1]
我需要在GDP_Change'中找到正值。接下来是两个负值。
答案 0 :(得分: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 :(得分:1)
这是一个基于NumPy的矢量化解决方案,使用convolution
来捕捉模式 -
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
。
答案 2 :(得分: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