python - Python 统计事件数量

标签 python pandas dataframe data-manipulation

继续我之前的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/

相关文章:

python - Siamese Network 的成本保持不变,为 0.6932

python - 如何使用mechanize作为当前真正的firefox浏览器?

python - 如何在 Pandas 中读取格式错误的宽 csv?

python - pandas describe() reshape 为具有列名的一行

python - Pandas 在非唯一值上自连接

Python Pylab,如何更改指定 Axis 大小的标签的大小

python - 如何为 ARM 交叉编译 python 包(例如 Numpy)

python - 创建两列之间存在差异的列时出现错误

python - 在具有不同实例数的特定列上合并两个不同长度的数据帧

python - 对公司名称的 DataFrame 进行非规范化 [第 2 部分]