Если гарантировано, что каждую секунду будет строка, тогда вы можете попытаться подсчитать строки вместо получения разницы во временных метках.
В любом случае вам нужно определить последовательные строки выше вашего порогового значения.
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]