Python 获取基于分组的连续发生次数
我正试图找到一种方法来获取按主机分组并按时间排序的连续事件组。理想情况下,我需要满足特定treshold和Python 获取基于分组的连续发生次数,python,pandas,Python,Pandas,我正试图找到一种方法来获取按主机分组并按时间排序的连续事件组。理想情况下,我需要满足特定treshold和isCorrect==false的组 范例 Time | Host | isCorrect | ------------------------------------- 10:01 | HostA | true | 10:02 | HostB | true | 10:03 | HostA |
isCorrect==false的组
范例
Time | Host | isCorrect |
-------------------------------------
10:01 | HostA | true |
10:02 | HostB | true |
10:03 | HostA | false |
10:15 | HostA | false |
10:16 | HostA | false |
10:18 | HostB | false |
10:20 | HostA | true |
10:21 | HostA | true |
10:22 | HostB | false |
10:23 | HostB | false |
阈值:>=3
将导致两组
Time | Host | isCorrect | Group
--------------------------------------------
10:03 | HostA | false |1
10:15 | HostA | false |1
10:16 | HostA | false |1
10:18 | HostB | false |2
10:22 | HostB | false |2
10:23 | HostB | false |2
我正在阅读,但找不到先按主机分组的方法。首先通过使用~
反转掩码和排序值(如有必要)过滤假值,然后使用阈值过滤组,最后通过以下方式创建组
列:
如果按连续False
s分组:
m = ~df['isCorrect']
df['Group'] = df['isCorrect'].cumsum()[m]
df = df[m].sort_values(['Host','Time'])
mask = df.groupby(['Group', 'Host'])['Group'].transform('size') >= 3
df = df[mask].copy()
df['Group'] = pd.factorize(df['Host'])[0] + 1
print (df)
Time Host isCorrect Group
2 10:03 HostA False 1
3 10:15 HostA False 1
4 10:16 HostA False 1
您所说的:获取连续发生的组是什么意思?这是在按主机分组后进行的吗?是的,在按主机分组后,主机A可以有3个以上的值?是的,它可以有0到数百个值。我需要至少连续发生3次的所有事件。我如何找到不同的组?因为霍斯塔可能在当天晚些时候有第二批人
m = ~df['isCorrect']
df['Group'] = df['isCorrect'].cumsum()[m]
df = df[m].sort_values(['Host','Time'])
mask = df.groupby(['Group', 'Host'])['Group'].transform('size') >= 3
df = df[mask].copy()
df['Group'] = pd.factorize(df['Host'])[0] + 1
print (df)
Time Host isCorrect Group
2 10:03 HostA False 1
3 10:15 HostA False 1
4 10:16 HostA False 1