Suppose we have the data frame df
c1 c2 c3 c4 c5 c6 0 'A' 'B' NaN NaN NaN NaN 1 'C' 'D' NaN NaN NaN NaN 2 'A' 'A' 'B' NaN NaN NaN 3 'A' 'B' 'C' NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN
I know that to count the number of 'B'
I have to use (df == 'B').sum().sum()
.
Now suppose that I want to count how many elements contained in the list v = ['B', 'C']
there are in the data frame. What could be a way of doing this?
Obviously (df == 'B').sum().sum() + (df == 'C').sum().sum()
is okay but I need something more general.
(df.isin(v)).sum().sum()
works fine.
Advertisement
Answer
Just stack
the dataframe, which will create a series, then you can use isin
, and call sum()
at last.
>>> df.stack().isin(['B', 'C']).sum() 5
Also, using isin
directly on the dataframe will work fine calling sum
twice:
>>> df.isin(['B', 'C']).sum().sum() 5