我正在尝试创建一个累积计数列,该列对布尔变量的实例进行计数,但当它在布尔变量中遇到零时重置为零。我正在寻找有条件的 cumcount。
bool cumcount_with_reset
0 1 1
1 0 0
2 1 1
3 1 2
4 1 3
5 1 4
6 1 5
7 0 0
8 1 1
9 1 2
10 1 3
11 0 0
12 0 0
13 1 1
14 1 2
15 1 3
下面名为“cumcount_with_reset”的变量是我需要的。如果布尔变量中遇到连续的 1,则会对它们进行计数;但如果它遇到零,它会重置为零并从头开始重新计算 1。
您可以在屏蔽 0 并在所有以 0 开头的组上设置自定义石斑鱼后使用
groupby.cumcount
,最后使用 reindex
恢复 0:
df = pd.DataFrame({'bool': [1,0,1,1,1,1,1,0,1,1,1,0,0,1,1,1]})
m = df['bool'].eq(1)
df['cumcount'] = (m[m].groupby((~m).cumsum()).cumcount().add(1)
.reindex(df.index, fill_value=0)
)
输出:
bool cumcount
0 1 1
1 0 0
2 1 1
3 1 2
4 1 3
5 1 4
6 1 5
7 0 0
8 1 1
9 1 2
10 1 3
11 0 0
12 0 0
13 1 1
14 1 2
15 1 3