Python基于唯一键与条件处理CSV数据求和问题
用Python实现Excel风格的分组求和(CSV数据处理)
嘿,我完全懂你这种“Excel操作溜得飞起,但换成Python就卡壳”的感受——毕竟Excel的可视化操作太直观了,换成代码确实需要一点点逻辑转换。针对你的需求(导入CSV,按A列唯一值分组,对B列满足1990<x<2000的对应C列求和),我整理了两种实用的实现方式,从原生模块到高效工具都有:
方法一:用Python原生csv模块实现(无需额外安装库)
如果你不想安装第三方库,用自带的csv模块就能搞定,逻辑和Excel里的“筛选+分类汇总”完全对应:
实现思路
- 打开CSV文件并读取数据
- 初始化一个字典,用来存储A列唯一值对应的C列求和结果
- 遍历每一行数据:
- 先判断B列的年份是否在1990到2000之间
- 如果符合条件,就把对应C列的值累加到A列对应键的总和里
- 最后输出或处理求和结果
完整代码
import csv # 初始化存储结果的字典:key是A列的唯一值,value是对应C列的求和结果 sum_result = {} with open('your_file.csv', 'r', newline='', encoding='utf-8') as csvfile: # 创建CSV读取器,同时获取表头 reader = csv.DictReader(csvfile) for row in reader: # 把字符串类型的列转成数值(CSV读取的都是字符串) a_value = row['A'] b_year = int(row['B']) c_value = int(row['C']) # 判断年份是否符合条件:1990 < 年份 < 2000 if 1990 < b_year < 2000: # 如果A列值不在字典里,先初始化总和为0 if a_value not in sum_result: sum_result[a_value] = 0 # 累加C列的值 sum_result[a_value] += c_value # 打印最终结果 print("按A列分组的C列求和结果(仅统计B列1990-2000的数据):") for a_key, total in sum_result.items(): print(f"A列值: {a_key}, 对应C列总和: {total}")
方法二:用pandas实现(大量数据场景首推)
如果你的数据量很大,原生csv模块的效率会有点跟不上,这时候pandas就是最佳选择——它的语法和Excel的操作逻辑更贴近,代码也更简洁:
实现思路
- 用
pandas读取CSV文件 - 筛选出B列年份在1990到2000之间的行
- 按A列分组,对C列进行求和
- 输出或保存结果
完整代码
import pandas as pd # 读取CSV文件 df = pd.read_csv('your_file.csv') # 筛选符合条件的行:B列年份大于1990且小于2000 filtered_df = df[(df['B'] > 1990) & (df['B'] < 2000)] # 按A列分组,对C列求和 sum_result = filtered_df.groupby('A')['C'].sum() # 打印结果(也可以用sum_result.to_csv()保存到文件) print("按A列分组的C列求和结果:") print(sum_result)
针对你的示例数据,运行结果会是:
A 1 133 2 69 4 29 5 85 Name: C, dtype: int64
两种方法的适用场景
- 原生
csv模块:适合小数据量、不想安装第三方库的场景,代码完全依赖Python自带工具 pandas:适合大量数据处理,运行效率更高,语法更简洁,后续还能轻松扩展更多Excel风格的操作(比如排序、筛选、透视表等)
内容的提问来源于stack exchange,提问作者energyMax
相关产品推荐
相关产品推荐

