如何统计Pandas DataFrame中多个指定值的总出现次数
问题背景
假设我们有如下DataFrame 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']中所有元素在该DataFrame内的总出现次数,逐值相加的写法(df == 'B').sum().sum() + (df == 'C').sum().sum()虽然能得到正确结果,但灵活性不足,待匹配元素多的时候写法非常繁琐,需要更通用的实现方法。
通用实现方案
直接使用Pandas提供的isin()方法即可满足需求,代码如下:
(df.isin(v)).sum().sum()
该方案逻辑清晰:
df.isin(v)会返回一个和原DataFrame维度完全一致的布尔矩阵,元素在列表v内的位置为True,其余位置为False- 连续调用两次
sum(),第一次按列统计每列的匹配数量,第二次把所有列的统计结果累加,最终得到所有匹配元素的总出现次数
内容的提问来源于stack exchange,提问作者LJG
相关产品推荐
相关产品推荐

