从pandas-df生成字典的最新方法,无需to_dict



我正试图从这个数据帧开始:

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上,除了用手,我无法思考如何做到这一点。我开始列出"运行"列中各个值的串联名称,但我确信这里有人有一种更快、更聪明的方法

谢谢Bunch!!

我建议将输出保存到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}

最新更新