假设我们有数据帧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
我知道要计算'B'
的数量,我必须使用(df == 'B').sum().sum()
。现在假设我想要计算数据帧中包含的列表v = ['B', 'C']
中的元素个数。有什么方法可以做到这一点呢?
显然(df == 'B').sum().sum() + (df == 'C').sum().sum()
是可以的,但我需要更一般的。
(df.isin(v)).sum().sum()
works fine.
只需stack
数据帧,它将创建一个系列,然后您可以使用isin
,最后调用sum()
。
>>> df.stack().isin(['B', 'C']).sum()
5
同样,在数据框上直接使用isin
也可以很好地调用sum
两次:
>>> df.isin(['B', 'C']).sum().sum()
5
试试stack
+value_counts
out = df.stack().value_counts()
Out[99]:
'A' 4
'B' 3
'C' 2
'D' 1
dtype: int64
然后
out[v].sum()