Counting the amount of times a boolean goes from True to False in a column

  • A+
Category:Languages

I have a column in a dataframe which is filled with booleans and i want to count how many times it changes from True to False.

I can do this when I convert the booleans to 1's and 0's ,then use df.diff and then divide that answer by 2

import pandas as pd  d = {'Col1': [True, True, True, False, False, False, True, True, True, True, False, False, False, True, True, False, False, True, ]}   df = pd.DataFrame(data=d)   print(df)  0    True 1    True 2    True 3   False 4   False 5   False 6    True 7    True 8    True 9    True 10  False 11  False 12  False 13   True 14   True 15  False 16  False 

My expected outcome would be The amount of times False came up is 3

 


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 mentioned Series, compares 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 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: