Use a logical comparison that will generate a logical df, then we can apply this to int, True will become 1, False will become 0, and then call count and pass param axis=1 to count in a row:
In [56]: df = pd.DataFrame({'a':[1,0,0,1,3], 'b':[0,0,1,0,1], 'c':[0,0,0,0,0]}) df Out[56]: abc 0 1 0 0 1 0 0 0 2 0 1 0 3 1 0 0 4 3 1 0 In [64]: (df == 0).astype(int).sum(axis=1) Out[64]: 0 2 1 3 2 2 3 2 4 1 dtype: int64
Violation of the above:
In [65]: (df == 0) Out[65]: abc 0 False True True 1 True True True 2 True False True 3 False True True 4 False False True In [66]: (df == 0).astype(int) Out[66]: abc 0 0 1 1 1 1 1 1 2 1 0 1 3 0 1 1 4 0 0 1
EDIT
as david pointed out, from astype to int not required, since Boolean types will be promoted to int when sum called, so this will simplify:
(df == 0).sum(axis=1)
source share