You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel多行列≥3项匹配计数需求及Python代码优化求助

Excel主列表与条目列表匹配统计解决方案

需求说明

  • 主列表区域:B-F列(每行对应1个姓名的5个数字,支持扩展列数)
  • 条目列表区域:I-M列(每行5个数字,支持扩展列数)
  • 统计规则:
    1. 对主列表的每一行,逐一计算与条目列表每行的数字匹配数量
    2. 仅当某条条目行与当前主列表行的匹配数≥3时,才将该条目行计入该行的统计总数
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:02:17