使用Counter类打印指定字典键及统计DataFrame中False结果遇问题
解决Counter统计False数量的问题
核心问题分析
你的代码里Counter['False']是错误写法:Counter是类,必须传入可迭代对象(比如你的df['cols2']序列)创建实例后,才能通过键False获取对应计数。另外生成cols2的逻辑也可以简化。
修正方案
1. 简化cols2的生成逻辑
用shift()直接比较当前行与前一行的值,比rolling.apply更高效直观,无需额外转换:
df['cols2'] = df['cols1'] == df['cols1'].shift()
结果直接是布尔值:当前值与前一个相等则为True,否则为False。
2. 正确用Counter统计False数量
from collections import Counter # 生成cols2 df['cols2'] = df['cols1'] == df['cols1'].shift() # 统计False的总数 false_count = Counter(df['cols2'])[False] print(false_count)
3. 若坚持原rolling写法的修正版
如果不想改动cols2的生成代码,只需修正Counter部分:
from collections import Counter df['cols2'] = df['cols1'].rolling(2).apply(lambda x: len(set(x)) != len(x), raw=True).replace({0: False, 1: True}) false_count = Counter(df['cols2'])[False] print(false_count)
额外优化
如果仅需统计False的数量,无需用Counter,直接用Pandas原生方法更高效:
# 方法1:用value_counts直接取False的计数 false_count = df['cols2'].value_counts()[False] # 方法2:统计等于False的行数 false_count = (df['cols2'] == False).sum()
内容的提问来源于stack exchange,提问作者April F
相关产品推荐
相关产品推荐

