Python实现排除TF及空值的单元格重复次数统计需求
解决方案:Python统计单元格重复次数(排除TF和空值)
没问题,我来帮你搞定这个问题。核心思路就是先过滤掉不需要的单元格值(空值和"TF"),再统计剩余值的重复情况,完全匹配你的需求。
步骤说明
- 先对每行数据做清洗:移除空值(包括
None和空字符串)以及值为"TF"的元素 - 用
collections.Counter高效统计清洗后每个值的出现次数 - 计算重复次数:单个值的重复次数 = 出现次数 - 1(出现1次不算重复);如果要总重复数,就把所有值的重复次数加起来
代码示例
假设你的数据是二维列表格式(比如从Excel读取后转换的结构),下面是完整实现代码:
from collections import Counter def count_cell_duplicates(row): # 过滤空值和"TF",保留有效单元格 cleaned_cells = [cell for cell in row if cell not in (None, "", "TF")] # 统计每个值的出现次数 value_counts = Counter(cleaned_cells) # 计算各值的重复次数(仅保留出现多次的),以及总重复数 duplicate_info = {val: cnt - 1 for val, cnt in value_counts.items() if cnt > 1} total_dup = sum(duplicate_info.values()) return duplicate_info, total_dup # 测试你给出的例子 row1 = ["", "A3", "A3", "TF", None] # 第一行过滤后剩余["A3", "A3"] row3 = ["A1", "A1", "B3", "B3", "B3", "TF", ""] # 第三行过滤后剩余["A1","A1","B3","B3","B3"] print("第一行统计结果:") details1, total1 = count_cell_duplicates(row1) print(f"各值重复次数:{details1},总重复数:{total1}") # 输出:各值重复次数:{'A3': 1},总重复数:1 print("\n第三行统计结果:") details3, total3 = count_cell_duplicates(row3) print(f"各值重复次数:{details3},总重复数:{total3}") # 输出:各值重复次数:{'A1': 1, 'B3': 2},总重复数:3
代码解释
cleaned_cells:用列表推导式快速筛掉无效值,只留需要统计的单元格Counter(cleaned_cells):Python内置的工具类,能一键统计元素出现次数,比手动循环高效很多duplicate_info:只保留出现次数大于1的值,用「出现次数-1」得到实际重复次数(比如出现2次就是重复1次)total_dup:把所有值的重复次数相加,得到整行的总重复数
如果你的数据是从Excel读取的(比如用pandas或openpyxl),只需要把每行数据转换成列表传入这个函数就行,逻辑完全通用。
内容的提问来源于stack exchange,提问作者user9397182
相关产品推荐
相关产品推荐

