如何用Python合并CSV首列重复行 整合同student_id多监护人信息为单行
实现方案
方案1:使用pandas实现(代码最简,推荐)
需提前安装pandas库:pip install pandas
代码如下:
import pandas as pd # 读取原始CSV df = pd.read_csv('input.csv') # 按student_id分组,将每组的监护人信息展开为一行 grouped = df.groupby('student_id').agg(list).reset_index() # 拆分监护人信息为两列,不足的补空 for col in ['guardian_email', 'guardian_first_name', 'guardian_last_name']: grouped[[col, f'{col}2']] = pd.DataFrame(grouped[col].tolist(), index=grouped.index) # 调整列顺序并输出 output_cols = ['student_id', 'guardian_email', 'guardian_first_name', 'guardian_last_name', 'guardian_email2', 'guardian_first_name2', 'guardian_last_name2'] grouped[output_cols].to_csv('output.csv', index=False)
方案2:使用Python标准库csv实现(无需安装第三方依赖)
代码如下:
import csv from collections import defaultdict # 存储每个学生的监护人信息 student_guardians = defaultdict(list) # 读取原始CSV with open('input.csv', 'r', newline='', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: sid = row['student_id'] guardian_info = [row['guardian_email'], row['guardian_first_name'], row['guardian_last_name']] student_guardians[sid].append(guardian_info) # 定义输出表头 output_headers = ['student_id', 'guardian_email', 'guardian_first_name', 'guardian_last_name', 'guardian_email2', 'guardian_first_name2', 'guardian_last_name2'] # 写入结果CSV with open('output.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(output_headers) for sid, guardians in student_guardians.items(): # 拼接两个监护人的信息,不足2个的补空字符串 row = [sid] + guardians[0] + (guardians[1] if len(guardians)>=2 else ['', '', '']) writer.writerow(row)
两种方案运行后都会生成符合要求的output.csv文件,单个监护人的学生对应的2号监护人为空值,两个监护人的会按原始CSV中的顺序拼接字段。
内容的提问来源于stack exchange,提问作者user247365
相关产品推荐
相关产品推荐

