Создайте dict of dict с 2 столбцами и значениями из третьего столбца в пандах - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть датафрейм в python, который выглядит примерно следующим образом:

df = pd.DataFrame({
        'tag':['php','image-processing','file-upload','upload','mime-types'] * 2,
         'probability':np.arange(10),
         'token':['check'] * 5 + ['imag'] * 5
}).set_index(['tag','token'])
print (df)
                        probability
tag              token             
php              check            0
image-processing check            1
file-upload      check            2
upload           check            3
mime-types       check            4
php              imag             5
image-processing imag             6
file-upload      imag             7
upload           imag             8
mime-types       imag             9

Мне нужно составить диктанты и значения, являющиеся вероятностью.Например, для php

{'php': {'check': 0,
         'imag': 1,
         ....},
 'image-processing': {....},
 'file-upload': {....},

} 

мне не нужны внутренние диктанты в любом порядке значений вероятности.Я могу легко это закодировать, но мне нужно знать, есть ли здесь какой-нибудь трюк панд.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Использование dictionary comprehension:

d = {k:v.reset_index(level=0, drop=True).to_dict() 
           for k, v in df.groupby(level=0)['probability']}

Другое решение:

d = {k: dict(v.values) for k, v in df.reset_index(level=1).groupby(level=0)}

print (d)

{'file-upload': {'check': 2, 'imag': 7}, 
 'image-processing': {'check': 1, 'imag': 6}, 
 'mime-types': {'check': 4, 'imag': 9}, 
 'php': {'check': 0, 'imag': 5},
 'upload': {'check': 3, 'imag': 8}}
0 голосов
/ 20 ноября 2018

Я думаю, что это самый быстрый метод:

Ваш пример:

df.reset_index(level=1, inplace=True)
df_dict = df.to_dict('your_index')

Простой пример:

import pandas as pd
df2 = pd.DataFrame({'id':['php','php','php','c'],'col1':['a','b','c','a'],'col2':[1,2,3,4]}).set_index('id')
df2.to_dict('id')

pandas.DataFrame.to_dict

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...