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