Python Pandas - 对满足条件的连续分组行进行计数,并在 false 时重置计数器

Python Pandas - Count consecutive grouped rows that satisfy condition and reset counter when false

我需要向现有数据框添加一个标记为“计数器”的新列,该列将按以下示例所示进行计算:

symbol percentage ??? counter ???
A 11 -1
A 2 0
A 5 1
B 2 0
B 1 1
B 3 2
A 2 2
A 9 -1
A 4 0
B 2 3
B 8 -1
B 7 -1

所以数据是按“符号”分组的,计算“计数器”的逻辑是这样的:

我试过类似的方法,但效果不佳,因为重置不起作用:

df['counter'] = np.where(df['percentage'] > 5, -1, df.groupby('symbol').cumcount())

IIUC,你可以使用掩码和自定义 groupby:

m = df['percentage'].gt(5)
group = m.groupby(df['symbol']).apply(lambda s: s.ne(s.shift()).cumsum())

df['count'] = (df
               .groupby(['symbol', group])
               .cumcount()
               .mask(m, -1)
               )

输出:

   symbol  percentage  counter
0       A          11       -1
1       A           2        0
2       A           5        1
3       B           2        0
4       B           1        1
5       B           3        2
6       A           2        2
7       A           9       -1
8       A           4        0
9       B           2        3
10      B           8       -1
11      B           7       -1