如何在列中找到正值后跟两个负值?

时间:2016-11-14 21:00:00

标签: python pandas

[![这是我的数据框] [1]] [1]

我需要在GDP_Change'中找到正值。接下来是两个负值。

3 个答案:

答案 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