【问题标题】:Is there a python function for locating multiple identical values in a row in a time series data set?是否有用于在时间序列数据集中连续定位多个相同值的 python 函数?
【发布时间】:2021-04-29 21:35:36
【问题描述】:

我正在处理 2020 年每分钟汇总的大型时间序列数据集。该数据集从正在监测热电厂设备的传感器获取值。传感器测量温度、压力、电流等值,并根据每次读数更新数据集。

我希望检测由传感器引起的数据集中的错误。当来自传感器的输入停留在某个值时,就会出现来自传感器的错误类型之一。例如,当我们知道它应该波动时,其中一个温度传感器连续 20 分钟报告了 71.46 的值。我正在尝试在我当前的数据集中找到这些错误,并希望训练一个模型来检查未来数据集中的重复值。

理想情况下,我希望能够在数据集中找到一个值连续重复 5 次或更多次的时间窗口。

数据是pandas时间数据框的形式,内核是python 3.6。如果您有任何建议,请告诉我。

【问题讨论】:

  • 你可以试试.duplicated()
  • 嗨!与 Stack Overflow 相比,您的问题听起来更适合 Cross Validated (stats.stackexchange.com) - 它要求提供方法建议,因此可能会在那里得到更好的回应

标签: python pandas time-series error-detection


【解决方案1】:

我认为找出 5 个连续值是否相同的简单方法是使用所有值的 5 步窗口大小计算滚动平均值,然后检查相邻行中的值之间的差异?不知道这是否过于简单?但是,如果滚动平均值在x 行与x+1 行相同,那么您是否重复相同的值?当然,如果碰巧进入窗口的新值与退出窗口的第一个值完全相同,则不会突出显示它。

可以这样做:

roller = df.rolling(5).mean()
diff_table = roller - roller.shift(1)

所以现在问题变成了在diff_table 中查找行/单元格,其中一行中的任何值都是0,这很容易:

has_repeat = np.isclose(diff_table, 0).any(axis=1)  

要找到发生这种情况的开始和结束时间有点棘手,但如果您的时间戳在表的索引中,您可以创建一个具有相同索引且值为 1Series0 取决于给定行的diff_table 中的任何列是否为0(即重复5 个值)。通过再次减去该系列中的相邻值,您可以确定它是区间的开始(例如 1 (1-0) 还是区间的结束 -1 (0 -(-1)),具体取决于您的值已选择)。

这有助于找到移动平均线开始保持不变的时间。因此,如果您从该开始时间减去 5 分钟,您将获得真正的间隔开始,此时传感器开始重复。

可能有更好的方法,但如果这是我的问题,我会尝试这种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 2015-01-10
    • 2016-09-30
    • 2017-08-26
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    相关资源
    最近更新 更多