繁体   English   中英

如何找到具有大于阈值的一定数量值的窗口索引?

[英]How to find index of the window which has certain number of values greater than threshold?

在此处输入图片说明

我刚刚开始学习python并为此代码苦苦挣扎。 我有一个看起来像图中所示的数据框。

我想在数据框中找到该窗口的第一次出现,该窗口的某些数量的值大于阈值。

例如:

假设数据框的维数为1000000。 我想将其除以1000的滑动窗口,并且需要知道该1000个值是否至少有10个大于某个阈值的值。 如果第一个窗口(点0-999)的至少10个值不大于某个阈值,则窗口将滑动并考虑值1-1000。 我必须找到第一次出现的窗口的索引,该窗口的至少10个值大于阈值。

同样在处理流数据时,当数据框中出现此类窗口时,我需要停止搜索。

我尝试了此代码,但遇到关键错误,无法解决问题。

for i in np.arange(0,len(data)-999):
    for j in np.arange(0,1000):
        if data[i+j]>threshold:
            var_count=var_count+1
        if var_count>10:
            print("Anomaly has occurred")

样本数据看起来像这样,大约有180万行。

在此处输入图片说明

样本数据可能看起来像这样

data_sample=[1,1,0,0,0,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,2,1,0,0,2,2,2,2,1,1,1]            
data_sample=pd.DataFrame(data_sample)

threshold=1
window=5

因为我需要至少2个大于1值,这将返回索引18,因为在该索引处,长度为5的窗口具有至少2个大于1的值。

您可以通过卷积来实现:

threshold = 10
window_size = 5
count_threshold = 3

kernel = np.ones(window_size)
over_threshold = (data['relevant_column'] > threshold).values
running_count = np.convolve(kernel, over_threshold)
np.nonzero(running_count >= count_threshold)[0]

或使用熊猫滚动的类似想法:

np.where(((data['relevant_column'] > threshold).rolling(window_size).sum() >= count_threshold))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM