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

Python实现CSV列匹配合并:按Serial分组关联Material

解决你的CSV分组拼接需求(Python新手友好版)

嘿,作为Python新手能迈出第一步已经很棒啦!你的需求是把同Serial组的Material用///拼起来,放到每组所有行的Related列,最多取5个值对吧?我来帮你完善代码,一步步实现这个功能:

思路拆解

  1. 先把CSV里的所有数据读进来,按Serial分组,收集每组的Material列表(限制最多5个)
  2. 再遍历每一行数据,给当前行的Related列填充对应组的拼接字符串
  3. 最后把处理好的数据写入新的CSV文件

完整代码实现

import csv

# 第一步:读取原始CSV,按Serial分组收集Material
grouped_materials = {}
with open('EGLOINDOORCSV.csv', mode='r', encoding='utf-8') as infile:
    # 用DictReader可以直接通过列名访问数据,不用记索引,更适合新手
    reader = csv.DictReader(infile)
    
    for row in reader:
        serial = row['Serial']
        material = row['Material']
        
        # 如果这个Serial组还没创建,就初始化一个空列表
        if serial not in grouped_materials:
            grouped_materials[serial] = []
        
        # 最多添加5个Material到组里
        if len(grouped_materials[serial]) < 5:
            grouped_materials[serial].append(material)

# 第二步:处理每一行数据,填充Related列,并写入新CSV
with open('processed_EGLOINDOORCSV.csv', mode='w', encoding='utf-8', newline='') as outfile:
    # 获取原始CSV的所有列名,保证输出的CSV和原结构一致
    fieldnames = reader.fieldnames
    writer = csv.DictWriter(outfile, fieldnames=fieldnames)
    
    # 先写入表头
    writer.writeheader()
    
    # 重新读取原始数据,给每行填充Related
    with open('EGLOINDOORCSV.csv', mode='r', encoding='utf-8') as infile:
        reader = csv.DictReader(infile)
        
        for row in reader:
            serial = row['Serial']
            # 把组内的Material用///拼接起来
            related_str = '///'.join(grouped_materials[serial])
            # 给当前行的Related列赋值
            row['Related'] = related_str
            # 写入处理后的行
            writer.writerow(row)

print("处理完成!已生成新文件:processed_EGLOINDOORCSV.csv")

代码说明

  • 用csv.DictReader和csv.DictWriter:相比你原来用的csv.reader,可以直接通过列名(比如row['Serial'])获取数据,不用记索引(比如row[4]),更不容易出错,也更易读
  • grouped_materials字典:键是Serial的值,值是对应组的Material列表,同时做了最多5个的限制
  • 分两次读取CSV:第一次分组收集数据,第二次填充Related列并写入新文件,这样逻辑更清晰
  • 保留原CSV的所有字段:输出的新CSV会包含原始的所有列,只修改Related列的值

测试你的示例数据

如果用你给出的示例数据运行这段代码,输出的CSV会和你想要的结果完全一致哦~

内容的提问来源于stack exchange,提问作者user7850757

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:27