簡體   English   中英

查找 pandas 系列中的值何時超過另一個系列中的多個閾值

[英]Finding when a value in a pandas Series crosses multiple threshold values from another Series

我有兩個 Pandas 系列,比如sensor_valuesthresholds thresholds按遞增順序定義。 我如何識別sensor_value系列中的值在哪些情況下超過其他系列thresholds值中定義的任何閾值?

我想做的基本上是這個答案中所做的,但是閾值(在那個答案中稱為line )本身就是一系列的多個值。 所以我想檢查的不是一個單一的閾值,而是多個閾值,因為數據是隨時間變化的,所以對於我的用例,不同的閾值可能適用,具體取決於sensor_values中的任何值所在的范圍。

我試着想出這個,但它沒有正確檢測到所有值,只檢測到一些值。

threshold_cross = (((sensor_values.rta >= thresholds.any()) & (sensor_values.next_rta < thresholds.any())) | ((sensor_values.next_rta > thresholds.any()) & (sensor_values.rta <= thresholds.any())) | (sensor_values.rta == thresholds.any()))

sensor_values系列的值可能會增加或減少。 這些門檻目前僅適用於增加的門檻。 對於降低值,將應用一組不同的閾值,但無論如何,一旦我弄清楚一組閾值,我就應該能夠自己做這件事。 所以現在,我們可以假設sensor_valuesthresholds都是單調遞增的。

編輯: sensor_values是一個 DataFrame,包含兩個字段rtanext_rta ,后來是rta的下一個實例(時間偏移 1 position,如鏈接答案中所做的那樣)

我想你可以pd.cut傳感器值到閾值之間的間隔,然后比較這些閾值:

import numpy as np
import pandas as pd

sensors = pd.Series([0.1, 1.3, 2.1, 1.7, 2.6, 3.8, 4.1, 5.1, 4.4, 3.2, 1.6, 7.2])
thresholds = pd.Series([2, 5, 7])

bins = pd.concat([pd.Series(-np.inf), thresholds, pd.Series(np.inf)])
binned = pd.cut(sensors, bins)

crossings = binned != binned.shift()
crossings[0] = False # Don't count the first element

Output:

>>> crossings.tolist()
[False, False, True, True, True, False, False, True, True, False, True, True]

重要的提示:

如果您的傳感器采用其中一個閾值的確切值(即,假設箱子被處理為右關閉,則取決於之前的間隔,它可能被計為交叉或不交叉),則上述情況會出現問題。 在這種情況下,您將不得不編寫額外的代碼來處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM