如何按列A分组自动对CSV文件的C、D列求和并保留列B
自动化生成CSV分组求和公式的方法
原始CSV数据
aaa,10,0,-200 sss,10,440,0 sss,10,880,0 sss,10,440,0 sss,10,440,0 ddd,5,560,0 ddd,5,560,1560 ddd,5,0,780
需求说明
- 按第一列(列a)分组,确保同组数据连续
- 每组保留第二列(列b)的固定值
- 第三列(列c)、第四列(列d)生成对应分组行范围的求和公式,格式为
=sum(cX:cY)、=sum(dX:dY)(X为组内起始行号,Y为组内结束行号)
实现方法
方法一:用Excel/Google Sheets操作
- 将CSV文件导入表格工具,确保数据从第1行开始,可自行添加表头(A=列a,B=列b,C=列c,D=列d)
- 对A列排序,保证同组数据连续排列
- 添加辅助列E:E1输入
1,E2及以下单元格输入公式=IF(A2<>A1,1,0),用于标记每组的最后一行 - 提取唯一分组值到空白列(比如F列):可通过「数据」→「高级筛选」选择不重复记录,或者手动复制唯一值
- 生成结果列:
- G列(对应列b):输入
=VLOOKUP(F1,A:B,2,FALSE),下拉填充 - H列(列c求和公式):输入
="=sum(c"&MATCH(F1,A:A,0)&":c"&MATCH(F1,A:A,0)+COUNTIF(A:A,F1)-1&")",下拉填充 - I列(列d求和公式):输入
="=sum(d"&MATCH(F1,A:A,0)&":d"&MATCH(F1,A:A,0)+COUNTIF(A:A,F1)-1&")",下拉填充
- G列(对应列b):输入
- 选中H、I列,复制后右键选择「粘贴为值」,再将F、G、H、I列内容复制到文本编辑器,替换制表符为逗号,即可得到目标CSV格式
方法二:用Python脚本批量处理
直接运行以下脚本,可自动读取原始CSV并生成带求和公式的目标文件:
import csv # 读取原始CSV,跳过空行 with open('input.csv', 'r', newline='', encoding='utf-8') as infile: reader = csv.reader(infile) rows = [row for row in reader if row] # 按第一列分组,记录每组的起始行、结束行和列b的值 group_info = {} for row_num, row in enumerate(rows, start=1): group_key = row[0] if group_key not in group_info: group_info[group_key] = { 'start_row': row_num, 'end_row': row_num, 'b_val': row[1] } else: group_info[group_key]['end_row'] = row_num # 构造输出行 output_rows = [] for key in group_info: info = group_info[key] sum_c = f'`=sum(c{info["start_row"]}:c{info["end_row"]})`' sum_d = f'`=sum(d{info["start_row"]}:d{info["end_row"]})`' output_rows.append([key, info['b_val'], sum_c, sum_d]) # 写入输出文件 with open('output.csv', 'w', newline='', encoding='utf-8') as outfile: writer = csv.writer(outfile) writer.writerows(output_rows)
操作步骤:
- 将原始CSV文件命名为
input.csv,放在脚本同一目录 - 运行脚本后,会生成
output.csv,内容即为所需结果
内容的提问来源于stack exchange,提问作者f1msch
相关产品推荐
相关产品推荐

