python - 根据 diff 过滤 DataFrame,其中 bool 值重复

标签 python pandas dataframe time-series

背景

在之前的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/

相关文章:

python - 遍历列以切片数据集

python - Xtick 标签不会旋转?

Python Pandas,如何替换计数小于 X 的值

pandas - 合并 pandas 或 powershell/terminal 中各个子文件夹中的所有 csv 并创建 pandas 数据框

python - 如何在数据框中搜索列表中的项目并对它们进行计数

python - 是否可以在更少的类(class)上重新训练训练有素的模型?

python - 我们可以从 python 启动并行 shell 命令吗?

python - Django:使用友好名称的 list_filter

python - 如何使用 pandas.shift() 而不丢失数据?

python - 如何计算任何 datetime64 列的第二天分钟差?