Проверка на порог и расчет продолжительности времени - PullRequest
0 голосов
/ 04 августа 2020

У меня есть DataFrame следующим образом:

       Timestamp                               Signal
2020-01-01T10:25:44.000 - 6.00                   20
2020-01-01T10:25:45.000 - 6.00                   15 
2020-01-01T10:25:46.000 - 6.00                    8
2020-01-01T10:25:47.000 - 6.00                   17 
2020-01-01T10:25:48.000 - 6.00                   19
2020-01-01T10:25:49.000 - 6.00                   19

Столбец timestamp представляет собой строку и не преобразован в datetime. Я хочу сравнить значения сигнала с пороговым значением, например 12, и вычислить время, в течение которого сигнал остается выше 12. Таким образом, для данного набора данных значения длительности будут [2,3] в секундах, возвращенные в виде списка / массива. Как мне это сделать в Python? Любая помощь приветствуется.

1 Ответ

1 голос
/ 04 августа 2020

Если гарантировано, что каждую секунду будет строка, тогда вы можете попытаться подсчитать строки вместо получения разницы во временных метках.

В любом случае вам нужно определить последовательные строки выше вашего порогового значения.

df['above'] = df.Signal.gt(12)
df['stint'] = (df.above.diff().fillna(0) != 0).cumsum()
# above is a boolean, so diff() will get +1 when stepping above 12 and -1 when stepping below
# !=0 will mark each step up/down with True
# cumsum() will create a 'stint ID' of sorts, so we can groupby it

Теперь мы можем проанализировать временную метку с помощью df.Timestamp = pd.to_datetime(dfTimestamp) и получить разницу между каждым шагом ИЛИ в этом случае проще просто

stints = df.groupby(['stint', 'above']).Signal.size()
stints = stints.loc[stints.above==True]
...