Python实现聚合数据旁显示计数(不使用Pandas)
解决方案
要实现按Date和Tag分组求和并统计每组记录数,我们可以调整数据存储结构,让每个分组键(日期+标签)对应一个包含金额总和和记录计数的字典。下面是修改后的完整代码:
from collections import defaultdict import csv # 用元组(date, tag)作为唯一键,对应的值存储总和与计数 d = defaultdict(lambda: {'sum_amount': 0, 'count': 0}) # 假设z是CSV数据的行迭代器(比如文件对象或字符串列表) for line in z: tokens = [t.strip() for t in line.split(",")] try: date = tokens[0] tag = tokens[1] amount = int(tokens[2]) except (ValueError, IndexError) as e: # 补充处理列数不足的情况 continue # 更新当前分组的统计值 key = (date, tag) d[key]['sum_amount'] += amount d[key]['count'] += 1 # 构建符合要求的输出内容,包含表头 output_lines = ['Date,Tag,Amount,Count'] for (date, tag), stats in d.items(): output_lines.append(f"{date},{tag},{stats['sum_amount']},{stats['count']}") # 写入结果文件 with open('output.txt', 'w') as f: f.write('\n'.join(output_lines))
关键改动说明:
- 数据结构优化:把原来的两层嵌套
defaultdict改成用(date, tag)元组作为唯一分组键,对应的值是一个字典,同时存储金额总和与记录计数,这样能一次性跟踪两个统计维度。 - 遍历逻辑调整:每读取一条有效记录,就找到对应的分组键,同时完成金额累加和计数递增。
- 输出格式规范:添加了你需要的表头,并且用标准CSV逗号分隔格式输出(原代码用空格分隔,现在更符合CSV文件的通用格式)。
- 异常处理增强:新增
IndexError捕获,避免因CSV行列数不足导致程序崩溃。
运行这段代码后,output.txt的内容就会完全匹配你期望的结果啦。
内容的提问来源于stack exchange,提问作者R.Dave
相关产品推荐
相关产品推荐

