Python 熊猫-检查数据帧中的重复模式

Python 熊猫-检查数据帧中的重复模式,python,pandas,dataframe,pattern-matching,Python,Pandas,Dataframe,Pattern Matching,我目前正试图用熊猫分析网络数据。我一直在读其他帖子,最接近我的问题是 我的数据框如下所示: 我试图检查是否有一些包裹丢失,并计算丢失的包裹数量。因此,我想定义一个窗口或矩阵,这里是2x2。然后定义一个模式,在本例中是 现在我想检查这个窗口是否完全是一个循环窗口。如果可能的话,这应该在一个额外的列中完成,给出false或true(或nan)。 我已经在下面的代码示例中尝试过了 在第一个示例中,我尝试通过迭代行来检查它。 我的第三个例子更符合我的要求: 使用rolling命令,我定义了一个窗口和一

我目前正试图用熊猫分析网络数据。我一直在读其他帖子,最接近我的问题是

我的数据框如下所示:

我试图检查是否有一些包裹丢失,并计算丢失的包裹数量。因此,我想定义一个窗口或矩阵,这里是2x2。然后定义一个模式,在本例中是

现在我想检查这个窗口是否完全是一个循环窗口。如果可能的话,这应该在一个额外的列中完成,给出false或true(或nan)。 我已经在下面的代码示例中尝试过了

在第一个示例中,我尝试通过迭代行来检查它。 我的第三个例子更符合我的要求: 使用rolling命令,我定义了一个窗口和一个模式,代码应该检查行,但是我得到了一个错误,因为模式是一个字符串。 这就是我想要的样子

df=pd.read\u csv('hallo')

这里我过滤掉了干扰 我开始检查丢失的包裹 这里的结果是(应该是:检查:真,真,假,假,真,真):

我在论坛上找到了一个非常优雅的解决方案,并尝试应用它:

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)))
但我的代码中似乎也有一个问题。我更喜欢最后一个解决方案,在这个解决方案中,我可以定义一个特定的模式和窗口的大小,让pandas遍历所有的数据帧,然后使用isnull()计算丢失的包的数量

我真的非常感谢你的帮助!
多谢各位

嗨!你的问题不是很清楚。也许你可以试着重新措辞,明确你在寻找什么,一个预期结果的例子,以及(重要的)你迄今为止所做的尝试。这样做的目的是一次解决一个问题;)我希望现在更清楚了。你为什么要用
d
标记它?它与D编程语言无关…对不起,这是偶然的!如果这仍然是一个问题,您能否澄清
.rolling
方法的问题?(似乎您希望将最小周期保留为默认值(即窗口大小)。)
   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  
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
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)))