Excel多行列≥3项匹配计数需求及Python代码优化求助
Excel主列表与条目列表匹配统计解决方案
需求说明
- 主列表区域:B-F列(每行对应1个姓名的5个数字,支持扩展列数)
- 条目列表区域:I-M列(每行5个数字,支持扩展列数)
- 统计规则:
- 对主列表的每一行,逐一计算与条目列表每行的数字匹配数量
- 仅当某条条目行与当前主列表行的匹配数≥3时,才将该条目行计入该行的统计总数
- 将最终统计结果写入G列对应行
原代码问题
原代码仅统计了所有主行与条目行的匹配数字总个数,未按「单条目行匹配数≥3才计数」的规则统计符合条件的条目行数。
修正后的实现代码
from openpyxl import load_workbook # 加载目标Excel文件 wb = load_workbook("your_file.xlsx") # 替换为你的文件路径 ws = wb.active # 定义列范围:可根据扩展需求修改列区间,比如主列表扩展到B:G就写'B:G' main_cols = ws['B:F'] item_cols = ws['I:M'] # 转换主列表每行数据为集合(跳过空行,假设第一行是表头) main_data = [] for row in main_cols: row_nums = [cell.value for cell in row if cell.value is not None] if row_nums: main_data.append(set(row_nums)) # 转换条目列表每行数据为集合(跳过空行) item_data = [] for row in item_cols: row_nums = [cell.value for cell in row if cell.value is not None] if row_nums: item_data.append(set(row_nums)) # 遍历主列表行,统计符合条件的条目行数 for row_idx, main_set in enumerate(main_data, start=2): # start=2对应Excel第2行,无表头则改为start=1 valid_count = 0 for item_set in item_data: # 计算两个集合的交集长度,即匹配数字数量 match_count = len(main_set & item_set) if match_count >= 3: valid_count += 1 # 写入G列(第7列)对应行 ws.cell(row=row_idx, column=7, value=valid_count) # 保存修改后的文件 wb.save("result_file.xlsx") # 替换为输出文件路径
代码关键说明
- 用集合交集计算匹配数,代码简洁且效率更高
- 自动跳过空行和空单元格,避免统计异常
- 支持列扩展:只需修改
main_cols和item_cols的列区间即可适配更多列 - 适配表头:默认第一行为表头,无表头时修改
start=2为start=1即可
内容的提问来源于stack exchange,提问作者devincentism
相关产品推荐
相关产品推荐

