Python 检查特定列的n个连续行是否都大于固定阈值

Python 检查特定列的n个连续行是否都大于固定阈值,python,pandas,Python,Pandas,我的数据框的前20行如下所示: date colA colB colC 35 2020-04-22 500000 26893 500000 36 2020-04-23 500000 26893 500000 37 2020-04-24 500000 26893 500000 38 2020-04-25 500000 65586 500000 39 2020-04-26 500000 65586

我的数据框的前20行如下所示:

 date            colA   colB    colC 
35  2020-04-22  500000  26893   500000  
36  2020-04-23  500000  26893   500000  
37  2020-04-24  500000  26893   500000  
38  2020-04-25  500000  65586   500000  
39  2020-04-26  500000  65586   500000  
40  2020-04-27  500000  65586   500000  
41  2020-04-28  500000  28586   500000  
42  2020-04-29  500000  28586   500000  
43  2020-04-30  500000  28586   500000  
44  2020-05-01  500000  28586   500000  
45  2020-05-02  500000  28586   500000
46  2020-05-03  500000  28586   500000  
47  2020-05-04  500000  28586   500000  
48  2020-05-05  500000  28586   500000  
49  2020-05-06  500000  28586   500000  
50  2020-05-07  500000  28586   500000  
51  2020-05-08  500000  28586   500000  
52  2020-05-09  500000  28586   500000  
53  2020-05-10  500000  28586   500000  
54  2020-05-11  500000  28586   500000  
我想检查
colB
25个连续行中的值是否大于
30000
。如果是,则返回开始的第一个
日期
,否则返回下一个连续25行大于阈值的日期

我已通过检查来解决此问题:

k = df[df['colB']>30000]
str(k.iloc[0].date.date())

但这只返回那些只超过30000的行的第一个日期,其中包括跳过行并保持那些令人满意的行。我不打算跳过这几行。我需要每一行都大于阈值,并获取满足该情况的第一个
日期

您可以使用滚动和移动:

df['isStart'] = df['colB'].rolling(25).agg(lambda x: np.all(x>3000)).shift(-24)
df['isStart'] = df['isStart'].astype(bool)
df.loc[df['isStart'], 'date']

你的解决方案几乎是正确的
df_co.loc[df_co['isStart','date']
给了我一些错误。但是,当我检查
df
时,它正确地将1放入右侧
date
isStart
列中。我遇到的错误很长,它说的是类似于“[35 0.0\n36 0.0\n37 0.0\n38 0.0\n39 0.0\n40 0.0\n41 0.0\n42 0.0\n43 0.0\n44 0.0\n45 0.0\n46 0.0\n47…isStart,Length:63,dtype:float64]都不在[index]中”
这是因为isStart是float,对不起!你现在能试试吗?这是我能想到的最好的解决办法!非常感谢你,布鲁诺!:)