【发布时间】:2020-01-18 15:51:44
【问题描述】:
from collections import defaultdict
dct = defaultdict(list)
for n in range(len(res)):
for i in indices_ordered:
dct[i].append(res[n][i])
请注意,res 是长度为 5000 的 pandas Series 列表,indices_ordered 是长度为 20000 的字符串列表。在我的 Mac(2.3 GHz Intel Core i5 和 16 GB 2133 MHz LPDDR3 ) 运行此代码。我对 Python 很陌生,但我觉得更聪明的编码(可能更少循环)会有很大帮助。
编辑:
这是一个示例,说明如何创建数据(res 和 indices_ordered)以便能够在 sn-p 上运行(由于我找不到,它稍微更改为访问唯一字段而不是按字段名称如何使用字段名称构建内联系列)
import random, string, pandas
index_sz = 20000
res_sz = 5000
indices_ordered = [''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10)) for i in range(index_sz)]
res = [pandas.Series([random.randint(0,10) for i in range(index_sz)], index = random.sample(indices_ordered, index_sz)) for i in range(res_sz)]
【问题讨论】:
-
您可以为“res”添加一个示例值吗?可视化您正在尝试做的事情变得更容易。
-
我们看不到
indices_ordered是什么,或者任何预期输入和输出的示例 -
使用列表理解:
[res[n].score[i] for i in indices_ordered for n in range(len(res))]。没有改进,但只是作为一种选择 -
indices_ordered 的目的是什么?
-
如果你使用 pandas,你应该留在 pandas 中。 pandas 数据框既可以被视为字典也可以被视为列表,因此无需创建所有这些普通的 Python 对象。请发布一个带有简短系列和一些索引的示例以及所需的输出应该是什么。
标签: python loops dictionary series