如何用Python统计CSV中指定列重复值分组的Value总和?
解决方案
以下是实现需求的完整代码,支持单个字母查询和所有字母汇总:
import csv def calculate_alphabet_sum(csv_path, target_alphabet=None): # 初始化字典存储每个字母的总和 sum_dict = {} with open(csv_path) as alphabetical_list_file: csv_reader = csv.reader(alphabetical_list_file, delimiter=',') # 跳过表头行 next(csv_reader) for row in csv_reader: alphabet = row[0].strip() # 将Value转为整数,避免字符串拼接错误 value = int(row[2].strip()) # 累加对应字母的总和 if alphabet in sum_dict: sum_dict[alphabet] += value else: sum_dict[alphabet] = value # 处理查询逻辑 if target_alphabet is not None: target_alphabet = target_alphabet.strip().upper() # 返回对应字母的总和,不存在则返回0 return sum_dict.get(target_alphabet, 0) else: # 返回所有字母的汇总列表 return [f"{k}: {v}" for k, v in sum_dict.items()] # 使用示例 csv_file_path = "/Users/name/Desktop/path/alphabetical_list.csv" # 查询字母A print(calculate_alphabet_sum(csv_file_path, "A")) # 输出3 # 查询字母D print(calculate_alphabet_sum(csv_file_path, "D")) # 输出7 # 查询所有字母 print(calculate_alphabet_sum(csv_file_path)) # 输出['A: 3', 'D: 7']
代码说明
- 数据读取与累加:先用
next(csv_reader)跳过表头行,遍历每一行时提取Alphabet列(索引0)和Value列(索引2),将Value转为整数后,用字典sum_dict累加每个字母的总和。 - 查询逻辑:
- 传入
target_alphabet参数时,返回对应字母的总和(自动处理大小写、去除首尾空格),如果字母不存在则返回0。 - 不传入该参数时,返回格式化后的汇总列表,格式为
['字母: 总和', ...]。
- 传入
- 鲁棒性处理:通过
strip()处理单元格可能存在的空格,int()确保数值正确累加,get()方法避免键不存在时抛出异常。
内容的提问来源于stack exchange,提问作者My Car
相关产品推荐
相关产品推荐

