如何使用Python按col a拆分值汇总CSV文件的total列数据?
用Python实现CSV多标签的Total求和汇总
需求说明
我有如下格式的CSV文件,需要根据col a列中以逗号分隔的各个值,对total列的数据进行求和汇总。
原CSV数据:
| total | col a |
|---|---|
| 100 | ca_1,ca_2 |
| 200 | ca_3,ca_2_1 |
| 300 | ca_4,ca_2_1 |
| 400 | ca_2,ca_2_1 |
| 500 | ca_2,ca_2_1 |
期望输出结果:
| total | col |
|---|---|
| 100 | ca_1 |
| 1000 | ca_2 |
| 200 | ca_3 |
| 1400 | ca_2_1 |
| 300 | ca_4 |
方法一:使用Python标准库csv
无需额外安装依赖,适合轻量场景:
import csv from collections import defaultdict # 初始化字典存储每个标签的总和 total_sum = defaultdict(int) # 读取输入CSV with open('input.csv', 'r', newline='', encoding='utf-8') as infile: reader = csv.DictReader(infile) for row in reader: total = int(row['total']) # 拆分多标签并遍历 for col in row['col a'].split(','): total_sum[col.strip()] += total # 处理标签前后可能的空格 # 写入结果CSV with open('output.csv', 'w', newline='', encoding='utf-8') as outfile: writer = csv.DictWriter(outfile, fieldnames=['total', 'col']) writer.writeheader() for col, sum_total in total_sum.items(): writer.writerow({'total': sum_total, 'col': col})
关键说明
- 用
defaultdict(int)自动初始化每个标签的总和为0,避免键不存在的报错 split(',')拆分多标签,strip()兼容带空格的标签格式(比如ca_1, ca_2)- 最终将汇总结果写入新CSV文件
方法二:使用pandas库(简洁高效)
如果处理大规模数据,pandas的向量化操作更高效,先安装依赖:
pip install pandas
实现代码:
import pandas as pd # 读取CSV文件 df = pd.read_csv('input.csv') # 将多标签行拆分为单行,保留对应total值 df_expanded = df.assign(col=df['col a'].str.split(',')).explode('col') # 清理标签前后的空格 df_expanded['col'] = df_expanded['col'].str.strip() # 按标签分组求和 result = df_expanded.groupby('col', as_index=False)['total'].sum() # 保存结果到CSV result.to_csv('output.csv', index=False)
关键说明
assign()+explode()快速拆分多标签行,实现一行转多行groupby()+sum()一键完成分组求和,代码更简洁- 适合处理十万行以上的大规模CSV数据
内容的提问来源于stack exchange,提问作者DEB
相关产品推荐
相关产品推荐

