给出了一个表格数据 struct ,我已经将其命名为pop(0),但为了清楚起见,将显示标题.基本上它是一个字符串格式的id和两个浮点格式的值条目.

#header
['id','value1','value2']

data=
['1001',25,10],
['1001',25,0],
['1002',100,0],
['1002',100,0],
['1002',100,0],
['1003',150,10]...

并给出一个只包含唯一ids的向量:

ids = ['1001','1002','1003']

我的目标是创建另一个存储所有value1之和的向量(现在可以忽略value2),同时保持ids中的顺序.所需输出:

print(ids, sum_result)
1001 50
1002 300
1003 150

我在DICT方法上取得了一些进展,但后来我痛苦地意识到,秩序并没有得到维护.

问题

How might we iterate over each unique element in `ids` and sum all occurrences of that id in `data`? In my actual data, there are also some "Nones" and "NaN"s for `value1s` if that helps narrow the solution set for anyone.

Note:%的人更喜欢原生Python

推荐答案

itertools.groupby要求首先按键对输入进行排序.一种更通用和更易读的方法是迭代记录列表,并通过聚合相同键的值来构建字典.使用collections.defaultdict轻松初始化新密钥:

from collections import defaultdict

data = [
    ['1001', 25, 10],
    ['1001', 25, 0],
    ['1002', 100, 0],
    ['1002', 100, 0],
    ['1002', 100, 0],
    ['1003', 150, 10]
]

output = defaultdict(int)
for id, *values in data:
    output[id] += values[0] if values else 0

for id, sum_result in output.items():
    print(id, sum_result)

这会产生以下结果:

1001 50
1002 300
1003 150

Python-3.x相关问答推荐

Pandas 数据帧断言等同于NaN

字符串块数组:如何根据一个数组中的元素对另一个数组中的元素进行分组

当索引大于一个整数而小于前一个索引时,我如何返回列值?

如何将多个字典合并到一个列中,并为不同的行使用相同的键

Heroku 中的未知错误代码缺少一个或多个参数

在特定条件下从 DataFrame 中提取特定组

pip install saxonche v 12.1.0 产生 FileNotFoundError

将自动文本转换为 DataFrame

它们是否同样存储在python3的内存中?

移动所有列的数据帧值以使其单调递增

!date 的命令无法从 jupyter notebook 运行

为什么 Sympy 不能解决我的非线性系统? Python 解释器一直在执行,直到我终止进程

列出相同索引的Pandas

具有 2 个输入的 python 3 map/lambda 方法

python 3中的SQLAlchemy ER图

numpy.ndarray 与 pandas.DataFrame

'~'(波浪号)运算符在 Python 中的应用

如何在 Python 中计算 cohen 的 d?

如何获得 BeautifulSoup 标签的所有直接子代?

使用 asyncio 的多个循环