Самый быстрый способ создания словарей из pandas df без to_dict - PullRequest
4 голосов
/ 13 июля 2020
• 1000 Свойство должно стать ключом, а данные должны стать значениями, например:
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, но я уверен, что у кого-то есть более быстрый и умный способ сделать это.

Большое спасибо !!

1 Ответ

5 голосов
/ 13 июля 2020

Я рекомендую сохранить результат в dict из dict, также не объединяйте ваш 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}
 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...