У меня есть df
, содержащий строки (иногда тысячи) данных, соответствующие цифровому сигналу. Я добавил дополнительный столбец, используя:
df['On/Off'] = np.where(df[col] > value, 'On', 'Off')
для маркировки сигнала как включенного или выключенного (value
устанавливается в зависимости от источника сигнала). Следующий код дает пример кадра данных, хотя и без фактических данных измерений:
df = pd.DataFrame({"Time/s" : np.arange(0,100,2),
"On/Off" : ("Off")})
df.at[10:13,"On/Off"] = "On"
df.at[40:43,"On/Off"] = "On"
df.at[47:,"On/Off"] = "On"
Я хочу посчитать, сколько раз сигнал регистрируется как включенный. Для приведенного выше кода результат будет 2 (в идеале с возвращенным индексом).
Учитывая то, как организован фрейм данных, я думаю, что нужно спуститься вниз по строкам и найти пары строк, где столбец on/off
читается как «выключен» в row n
, тогда «вкл» в row_n+1
должен быть подходом, как в:
i =0 # <--- number of on/off pairings
if cycle = [row_n]='On'; [row_n+1]='Off':
i=+1
Мой текущий план основан на ответе на это ( Панды перебирают пары строк DataFrame )
Я думаю, df.shift()
предлагает потенциальный маршрут, генерируя 2 кадра данных, а затем сравнивая строки на предмет несовпадений, но кажется, что может быть более простой способ, возможно, с использованием itertools или pd.iterrows (и т. Д.).
Как обычно, любая помощь очень ценится.