Я сейчас пытаюсь анализировать данные сети с помощью панд. Я читал другие посты, и самая близкая к моей проблеме это Панды - Найти и проиндексировать строки, которые соответствуют шаблону последовательности строк .
Мой фрейм данных выглядит так:

Я пытаюсь проверить, потерялись ли некоторые пакеты, и посчитать количество потерянных пакетов. Поэтому я хотел бы определить окно или матрицу, здесь 2x2. Затем определите шаблон, в этом случае это будет
.
Теперь я хочу проверить, является ли окно точно повторяющимся окном. Если возможно, это должно быть сделано в дополнительном столбце, давая мне false или true (или nan).
Я попробовал это уже в следующих примерах моего кода.
В первом примере я попытался проверить это с помощью итерации строк.
Мой третий пример больше того, что я искал:
С помощью команды прокрутки я определяю окно и шаблон, код должен проверять строки, но я получаю ошибку, потому что шаблон является строкой.
Вот как бы я хотел, чтобы это выглядело.

import pandas as pd
df = pd.read_csv ('hallo')
Здесь я отфильтровываю помехи
Protocol_filtered = df[df['Protocol']== 'ICMP']
Protocol_filtered1 = Protocol_filtered[['Time','Source','Destination','Info']]
Protocol_filtered1 = Protocol_filtered1.reset_index(drop=True)
Я начинаю проверять потерянные пакеты
s0 = 0
s1 = 1
for row in Protocol_filtered1.iterrows():
while s1 <= len (Protocol_filtered1):
source = Protocol_filtered1.loc[s0,'Source']
dest = Protocol_filtered1.loc[s1,'Destination']
if source == dest:
Protocol_filtered1['Check']= True
else:
Protocol_filtered1['Check']= False
source1 = Protocol_filtered1.loc[s1,'Source']
dest1 = Protocol_filtered1.loc[s0,'Destination']
if source1 == dest1:
Protocol_filtered1['Check1']= True
else:
Protocol_filtered1['Check1']= False
s0 = s0 + 2
s1 = s1 + 2
Результат этого кода не тот, который я хотел, так как он дает мне, например, значение true в строке 2, где оно должно быть ложным.

Логика следующего кода верна, но он проверяет i для каждой строки, в то время как он всегда должен проверять две последовательные строки вместе (0 & 1, 2 & 3, 4 & 5 ...):
pattern = ['192.168.20.35', '192.168.20.31']
i = (Protocol_filtered1['Source'] == '192.168.20.35') & (Protocol_filtered1['Source'].shift(-1) == '192.168.20.31')
i &= (Protocol_filtered1['Destination'] == '192.168.20.31') & (Protocol_filtered1['Destination'].shift(-1)== '192.168.20.35')
Protocol_filtered1.index[i]
Protocol_filtered1 ['Check1'] = i
Результат здесь (Должно быть: Проверить: True, True, False, False, True, True):

Очень элегантное решение, которое я нашел на форуме и которое я пытался применить:
pattern = ['192.168.20.35', '192.168.20.31']
obs = len(pattern)
Protocol_filtered1['S1'] = (Protocol_filtered1['Source']
.rolling(window = obs, min_periods = )
.apply(lambda x: (x==pattern).all())
.astype(bool)
.shift(-1*(obs-1)))
Но, похоже, проблема в моем коде. Я предпочитаю последнее решение, где я могу определить определенный шаблон и размер окна и позволить пандам пройти по всему фрейму данных, где я затем могу подсчитать количество потерянных пакетов с помощью isnull ().
Я был бы очень признателен за помощь!
Большое спасибо!