pandas 中重置的条件 cumcount

问题描述 投票:0回答:1

我正在尝试创建一个累积计数列,该列对布尔变量的实例进行计数,但当它在布尔变量中遇到零时重置为零。我正在寻找有条件的 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。

python pandas counter
1个回答
0
投票

您可以在屏蔽 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
© www.soinside.com 2019 - 2024. All rights reserved.