You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定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实现。

解决方案

实现思路

  1. 先遍历data统计每个id的value1总和,将None和NaN这类无效值视为0参与计算
  2. 严格按照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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:01:12