Counting the amount of times a boolean goes from True to False in a column
Notice that subtracting True
(1
) from False
(0
) in integer terms gives -1
:
res = df['Col1'].astype(int).diff().eq(-1).sum() # 3
To apply across a Boolean dataframe, you can construct a series mapping label to count:
res = df.astype(int).diff().eq(-1).sum()
You can perform a bitwise and
of the Col1
with a mask indicating where changes occur in successive rows:
(df.Col1 & (df.Col1 != df.Col1.shift(1))).sum()
3
Where the mask, is obtained by comparing Col1
with a shifted version of itself (pd.shift
):
df.Col1 != df.Col1.shift(1)
0 True
1 False
2 False
3 True
4 False
5 False
6 True
7 False
8 False
9 False
10 True
11 False
12 False
13 True
14 False
15 False
16 False
17 False
Name: Col1, dtype: bool
For multiple columns, you can do exactly the same (Here I tested with a col2
identical to col1
)
(df & (df != df.shift(1))).sum()
Col1 3
Col2 3
dtype: int64