我想枚举一个事件发生了多少次而没有中断,如果中断了,则从头开始计数,例如输入日期和事件,计数应该是:
| Date | event| Count |
| ---- | -----| ----- |
| 1 | A | 1 |
| 2 | A | 2 |
| 3 | B | 1 |
| 4 | A | 1 |
| 5 | B | 1 |
| 6 | B | 2 |
| 7 | B | 3 |
| 8 | A | 1 |
| 9 | A | 2 |
有人知道如何解决这个问题吗? 谢谢
我试过rank函数,但是再次发生时会继续统计之前的事件
您可以通过将值与列中的先前值进行比较来生成每个
event
的组:
groups = (df['event'] != df['event'].shift()).cumsum()
输出:
1 1
2 1
3 2
4 3
5 4
6 4
7 4
8 5
9 5
groupby
event
和 groups
并取每组的 累计计数,加 1 使 Count
值从 1: 开始
df['Count'] = df.groupby(['event', groups]).cumcount()+1
输出:
Date event Count
0 1 A 1
1 2 A 2
2 3 B 1
3 4 A 1
4 5 B 1
5 6 B 2
6 7 B 3
7 8 A 1
8 9 A 2