背景
在之前的question中,我想检测价格列中的值何时开始重复。
这样做的原因是从数据帧中过滤/删除开始重复的行。
数据是金融时间序列,将馈送到人工神经网络。重复的价格表明市场已关闭 - 对于趋势预测毫无用处
使用的解决方案是
df2['diff'] = df2.groupby(pd.Grouper(key='本地日期_本地时间', freq='H'))['关闭'].diff(2).ne(0 )
- 按
本地日期_本地时间
分组,并查看关闭
值 - 如果当前收盘价与 2 分钟前的
收盘价
没有不同,则返回False
这工作正常,但有时价格会恢复到两分钟前的水平。但是,我将假设(并稍后在过滤后的数据中检查)这种情况不会连续两分钟发生(即 0 处的价格 = 2 处的价格,1 处的价格 = 3 处的价格)。
数据:三列“本地日期_本地时间”、“关闭”、“差异”
总行数:67K
Local Date_Local Time Close diff
201 2019-07-31 19:01:00 3014.74 True
202 2019-07-31 19:00:00 3014.98 True
203 2019-07-31 18:59:00 3014.92 True
204 2019-07-31 18:58:00 3014.68 False <-- *
205 2019-07-31 18:57:00 3014.51 True
206 2019-07-31 18:56:00 3014.68 True <-- because of this
207 2019-07-31 18:55:00 3014.62 True
208 2019-07-31 18:54:00 3014.53 True
209 2019-07-31 18:53:00 3014.22 True
210 2019-07-31 18:52:00 3014.43 True
211 2019-07-31 18:51:00 3014.09 True
212 2019-07-31 18:50:00 3014.11 True
213 2019-07-31 18:49:00 3014.37 True
214 2019-07-31 18:48:00 3014.19 True
215 2019-07-31 18:47:00 3014.80 True
216 2019-07-31 18:46:00 3014.77 True
217 2019-07-31 18:45:00 3014.28 True <-- *
218 2019-07-31 18:44:00 3014.28 True
219 2019-07-31 18:43:00 3014.01 True <-- because of this
220 2019-07-31 18:42:00 3014.07 True
221 2019-07-31 18:41:00 3013.90 True
222 2019-07-31 18:40:00 3014.02 True
* 如果我使用了 .diff(1)
,那么第 217 行将显示 False,第 204 行将显示 True。不幸的是,它比较的是特定的前一分钟,而不是“最后 x 分钟”。
虽然第 204 行显示错误,但它应该保留而不是被删除,因为事件仍在继续,而交易停止时价格就会变得陈旧。
问题
如何从此数据框(或副本)中删除行,以便在 diff
列显示 False
2 次或更多次的位置,直到停止?
转这个
10 2019-07-31 22:12:00 2980.38 False
11 2019-07-31 22:11:00 2980.38 False
12 2019-07-31 22:10:00 2980.38 False
13 2019-07-31 22:09:00 2980.38 False
14 2019-07-31 22:08:00 2980.38 False
15 2019-07-31 22:07:00 2980.38 True
16 2019-07-31 22:06:00 2980.38 True
17 2019-07-31 22:05:00 2980.37 True
18 2019-07-31 22:04:00 2980.36 True
19 2019-07-31 22:03:00 2980.32 True
进入此(甚至删除第 13 行)
13 2019-07-31 22:09:00 2980.38 False
14 2019-07-31 22:08:00 2980.38 False
15 2019-07-31 22:07:00 2980.38 True
16 2019-07-31 22:06:00 2980.38 True
17 2019-07-31 22:05:00 2980.37 True
18 2019-07-31 22:04:00 2980.36 True
19 2019-07-31 22:03:00 2980.32 True
最佳答案
检查这是否适合您
a=((df.reset_index().groupby('diff')['index'].apply(np.array))[0])[:3]
df.drop(a,inplace=True)
关于python - 根据 diff 过滤 DataFrame,其中 bool 值重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57608955/