我正在尝试从一组值中快速创建一个字典,其中字典中的每个元素都具有与该值关联的另外两个列中的键值对。例如:
我的资料:
cheese x y
1 0000000000000005559 1 2
2 0000000000000005559 2 2
3 0000000000000004058 3 5
4 0000000000000004058 4 5
5 0000000000000004058 5 5
所需的输出:
cheese
0000000000000005559 {1: 2, 2: 2}
0000000000000004058 {3: 5, 4: 5, 5: 5}
0000000000000007157 {6: 7, 7: 7}
0000000000000000815 {8: 10, 9: 10, 10: 10}
0000000000000009160 {11: 12, 12: 12}
我可以使用过于复杂的
lambda
和apply
来执行此操作,但是对于较大的数据框(数百万个唯一分组的顺序),这确实很慢。如何快速实现? 最佳答案
使用defaultdict
的方法
这应该很快
from collections import defaultdict
d = defaultdict(dict)
es = df.epoch.values.tolist()
xs = df.x.values.tolist()
ys = df.y.values.tolist()
for e, x, y in zip(es, xs, ys):
d[e][x] = y
pd.Series(d)
1505339100449045559 {1: 2, 2: 2}
1505339102148504058 {3: 5, 4: 5, 5: 5}
dtype: object
关于python - Pandas -快速从列和行组中创建字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46587971/