Python 熊猫-检查数据帧中的重复模式
我目前正试图用熊猫分析网络数据。我一直在读其他帖子,最接近我的问题是 我的数据框如下所示: 我试图检查是否有一些包裹丢失,并计算丢失的包裹数量。因此,我想定义一个窗口或矩阵,这里是2x2。然后定义一个模式,在本例中是 现在我想检查这个窗口是否完全是一个循环窗口。如果可能的话,这应该在一个额外的列中完成,给出false或true(或nan)。 我已经在下面的代码示例中尝试过了 在第一个示例中,我尝试通过迭代行来检查它。 我的第三个例子更符合我的要求: 使用rolling命令,我定义了一个窗口和一个模式,代码应该检查行,但是我得到了一个错误,因为模式是一个字符串。 这就是我想要的样子 df=pd.read\u csv('hallo') 这里我过滤掉了干扰 我开始检查丢失的包裹 这里的结果是(应该是:检查:真,真,假,假,真,真): 我在论坛上找到了一个非常优雅的解决方案,并尝试应用它:Python 熊猫-检查数据帧中的重复模式,python,pandas,dataframe,pattern-matching,Python,Pandas,Dataframe,Pattern Matching,我目前正试图用熊猫分析网络数据。我一直在读其他帖子,最接近我的问题是 我的数据框如下所示: 我试图检查是否有一些包裹丢失,并计算丢失的包裹数量。因此,我想定义一个窗口或矩阵,这里是2x2。然后定义一个模式,在本例中是 现在我想检查这个窗口是否完全是一个循环窗口。如果可能的话,这应该在一个额外的列中完成,给出false或true(或nan)。 我已经在下面的代码示例中尝试过了 在第一个示例中,我尝试通过迭代行来检查它。 我的第三个例子更符合我的要求: 使用rolling命令,我定义了一个窗口和一
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)))