猿问

根据前后阈值和时间戳对 Pandas 进行切片

我有一个如下所示的数据框:


Timestamp (Index)       Status    value

2017-01-01 12:01:00     OPEN      83 

2017-01-01 12:02:00     OPEN      82 

2017-01-01 12:03:00     OPEN      87 

2017-01-01 12:04:00     CLOSE     82 

2017-01-01 12:05:00     CLOSE     81 

2017-01-01 12:06:00     CLOSE     81

2017-01-01 12:07:00     CLOSE     81

2017-01-01 12:08:00     CLOSE     81

2017-01-01 12:09:00     CLOSE     81

2017-01-01 12:10:00     CLOSE     81

2017-01-01 12:11:00     CLOSE     81

2017-01-01 12:12:00     OPEN      81

2017-01-01 12:13:00     OPEN      81

2017-01-01 12:14:00     OPEN      81

2017-01-01 12:15:00     OPEN      81

2017-01-01 12:16:00     CLEAR     34

2017-01-01 12:17:00     CLOSE     23

2017-01-01 12:18:00     CLOSE     23

2017-01-01 12:19:00     CLOSE     75

2017-01-01 12:20:00     CLOSE     65

2017-01-01 12:21:00     CLOSE     72

2017-01-01 12:22:00     CLOSE     76

2017-01-01 12:23:00     CLOSE     77

2017-01-01 12:24:00     OPEN      87

2017-01-01 12:25:00     OPEN      87

2017-01-01 12:26:00     OPEN      87

2017-01-01 12:27:00     OPEN      87

2017-01-01 12:28:00     OPEN      87

2017-01-01 12:29:00     CLOSE     75

2017-01-01 12:30:00     CLOSE     75

2017-01-01 12:31:00     CLOSE     75

如果连续关闭值中的第一个低于 70,我想删除之前出现的打开块和值低于 70 的关闭块。它应该如下所示:


Timestamp (Index)       Status    value

2017-01-01 12:01:00     OPEN      83 

2017-01-01 12:02:00     OPEN      82 

2017-01-01 12:03:00     OPEN      87 

2017-01-01 12:04:00     CLOSE     82 

2017-01-01 12:05:00     CLOSE     81 

2017-01-01 12:06:00     CLOSE     81

2017-01-01 12:07:00     CLOSE     81

2017-01-01 12:08:00     CLOSE     81

2017-01-01 12:09:00     CLOSE     81

2017-01-01 12:10:00     CLOSE     81

2017-01-01 12:11:00     CLOSE     81

2017-01-01 12:24:00     OPEN      87

2017-01-01 12:25:00     OPEN      87

2017-01-01 12:26:00     OPEN      87

2017-01-01 12:27:00     OPEN      87

2017-01-01 12:28:00     OPEN      87

2017-01-01 12:29:00     CLOSE     75

2017-01-01 12:30:00     CLOSE     75

2017-01-01 12:31:00     CLOSE     75

关于如何获取相关时间戳以删除这些时间段的任何想法?


HUWWW
浏览 80回答 1
1回答

慕标5832272

尝试:df[df.groupby((df.status.shift().bfill().ne(df.status) & df.status.eq('OPEN')).cumsum()).transform(min).value.ge(70)]结果:                    status  valuetimestamp                        2017-01-01 12:01:00   OPEN     832017-01-01 12:02:00   OPEN     822017-01-01 12:03:00   OPEN     872017-01-01 12:04:00  CLOSE     822017-01-01 12:05:00  CLOSE     812017-01-01 12:06:00  CLOSE     812017-01-01 12:07:00  CLOSE     812017-01-01 12:08:00  CLOSE     812017-01-01 12:09:00  CLOSE     812017-01-01 12:10:00  CLOSE     812017-01-01 12:11:00  CLOSE     812017-01-01 12:24:00   OPEN     872017-01-01 12:25:00   OPEN     872017-01-01 12:26:00   OPEN     872017-01-01 12:27:00   OPEN     872017-01-01 12:28:00   OPEN     872017-01-01 12:29:00  CLOSE     752017-01-01 12:30:00  CLOSE     752017-01-01 12:31:00  CLOSE     75方法是创建status不等于前一个的组status,从 开始status == 'OPEN'。然后保留value每组大于或等于 70 的行。
随时随地看视频慕课网APP

相关分类

Python
我要回答