Python 检查特定列的n个连续行是否都大于固定阈值
我的数据框的前20行如下所示: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
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,对不起!你现在能试试吗?这是我能想到的最好的解决办法!非常感谢你,布鲁诺!:)