如何基于指定ID列表按序汇总数据中对应value1的总和?
问题描述
给出的表格数据结构如下(已移除表头):
data = [ ['1001',25,10], ['1001',25,0], ['1002',100,0], ['1002',100,0], ['1002',100,0], ['1003',150,10] # ... 更多数据 ]
每个元素包含字符串类型的id、浮点型的value1和value2(无需关注value2)。
另有按固定顺序排列的唯一id列表:
ids = ['1001','1002','1003']
需求:生成对应结果,统计每个id的value1总和,严格保留ids的顺序,期望输出格式如下:
1001 50 1002 300 1003 150
遇到的问题:之前用普通字典统计无法保留顺序,且实际数据中value1存在None和NaN值,需要用原生Python实现。
解决方案
实现思路
- 先遍历
data统计每个id的value1总和,将None和NaN这类无效值视为0参与计算 - 严格按照
ids的固定顺序,依次取出对应id的总和并输出
代码实现
import math # 初始化总和字典,仅包含ids中的id,默认值为0 sum_dict = {id_: 0 for id_ in ids} # 遍历数据统计总和 for item in data: id_, value1, _ = item # 处理None和NaN,无效值按0计算 if value1 is None or (isinstance(value1, float) and math.isnan(value1)): val = 0 else: val = value1 # 仅累加ids中存在的id的数值 if id_ in sum_dict: sum_dict[id_] += val # 按ids顺序输出结果 for id_ in ids: print(f"{id_} {sum_dict[id_]}")
说明
- 用字典推导式初始化
sum_dict,确保只包含目标id,避免冗余数据 - 借助
math.isnan()判断NaN值(注意NaN是浮点型,且NaN != NaN,无法直接用等于判断) - 最后按
ids的原始顺序遍历输出,完全保证结果顺序符合要求
内容的提问来源于stack exchange,提问作者Arash Howaida
相关产品推荐
相关产品推荐

