从字典生成字典的最新方法,无需口述

2024-10-03 00:18:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从这个数据框架出发:

   run property  low  high  abs1perc0  in1out0  weight
0  bob        a    5     9          1        1       2
1  bob        s    5     9          1        1       2
2  bob        d    1    10          0        1       2
3  tom        a    1     2          1        1       2
4  tom        s    2     3          1        1       2
5  tom        d    8     9          0        1       2 

指向以单个“运行”名称和列名(属性除外)串联而命名的词典。属性必须成为键,数据必须成为值,即:

boblow =       {'a':5, 's':5, 'd':1}
bobhigh =      {'a':9, 's':9, 'd':10}
bobabs1perc0 = {'a':1, 's':1, 'd':0}
...
tomlow =       {'a':1, 's':2, 'd':8}
...

这将不得不发生在大型dfs上,除了手工操作外,我无法思考如何进行。我开始列出“run”列中各个值的串联名称,但我相信这里有人有一种更快、更聪明的方法

非常感谢


Tags: 数据run名称框架属性property命名low
1条回答
网友
1楼 · 发布于 2024-10-03 00:18:46

我建议将输出保存到dictdict中,也不要将tuple键合并到一个键中,同样在我们重塑df之后,to_dict仍然有效

d=df.set_index(['run','property']).stack().unstack(1).to_dict('index')
{('bob', 'low'): {'a': 5, 'd': 1, 's': 5}, ('bob', 'high'): {'a': 9, 'd': 10, 's': 9}, ('bob', 'abs1perc0'): {'a': 1, 'd': 0, 's': 1}, ('bob', 'in1out0'): {'a': 1, 'd': 1, 's': 1}, ('bob', 'weight'): {'a': 2, 'd': 2, 's': 2}, ('tom', 'low'): {'a': 1, 'd': 8, 's': 2}, ('tom', 'high'): {'a': 2, 'd': 9, 's': 3}, ('tom', 'abs1perc0'): {'a': 1, 'd': 0, 's': 1}, ('tom', 'in1out0'): {'a': 1, 'd': 1, 's': 1}, ('tom', 'weight'): {'a': 2, 'd': 2, 's': 2}}

d[('bob','low')]
{'a': 5, 'd': 1, 's': 5}
 

相关问题 更多 >