继续我之前的Question我需要更多帮助。
数据框就像
time eve_id sub_id flag
0 5 2 0
1 5 2 0
2 5 2 1
3 5 2 1
4 5 2 0
5 4 25 0
6 4 30 0
7 5 2 1
我需要在标志从0到1的时间里计算eve_id, 并统计eve_id的时间标志为1到1
输出将如下所示
time flag count
0 0 2
2 1 2
4 0 3
有人可以帮我吗?
最佳答案
首先,我们创建一个石斑鱼指示器,检查两行之间的差异
是否不等于
0,这表明存在差异。
然后我们对该指标进行分组并使用agg
。从pandas 0.25.0
开始,我们有 named aggregations
:
s = df['flag'].diff().ne(0).cumsum()
grpd = df.groupby(s).agg(time=('time', 'first'),
flag=('flag', 'first'),
count=('flag', 'size')).reset_index(drop=True)
输出
time flag count
0 0 0 2
1 2 1 2
2 4 0 3
3 7 1 1
如果时间
是您的索引,请使用:
grpd = df.assign(time=df.index).groupby(s).agg(time=('time', 'first'),
flag=('flag', 'first'),
count=('flag', 'size')).reset_index(drop=True)
注意:额外的行是因为最后一行和之前的行之间存在差异
关于python - Python 统计事件数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57623212/