为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUWWW 2023-03-22 10:53:28
我有一个如下所示的数据框:Timestamp (Index)       Status    value2017-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     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:12:00     OPEN      812017-01-01 12:13:00     OPEN      812017-01-01 12:14:00     OPEN      812017-01-01 12:15:00     OPEN      812017-01-01 12:16:00     CLEAR     342017-01-01 12:17:00     CLOSE     232017-01-01 12:18:00     CLOSE     232017-01-01 12:19:00     CLOSE     752017-01-01 12:20:00     CLOSE     652017-01-01 12:21:00     CLOSE     722017-01-01 12:22:00     CLOSE     762017-01-01 12:23:00     CLOSE     772017-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如果连续关闭值中的第一个低于 70,我想删除之前出现的打开块和值低于 70 的关闭块。它应该如下所示:Timestamp (Index)       Status    value2017-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     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关于如何获取相关时间戳以删除这些时间段的任何想法?
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

尝试:


df[df.groupby((df.status.shift().bfill().ne(df.status) & df.status.eq('OPEN')).cumsum()).transform(min).value.ge(70)]

结果:


                    status  value

timestamp                        

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

方法是创建status不等于前一个的组status,从 开始status == 'OPEN'。


然后保留value每组大于或等于 70 的行。


查看完整回答
反对 回复 2023-03-22
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信