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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:57:02