Создать вложенный словарь из pd dataframe Python - PullRequest
2 голосов
/ 20 февраля 2020

У меня есть следующий кадр данных (в действительности с сотнями строк)

    Location Date       Court    Winner 
0   Paris    10/2/2018  Outdoor  Flavio
1   Paris    10/2/2018  Indoor   Luca
2   Paris    10/2/2018  Indoor   Giovanni
3   Paris    10/2/2018  Indoor   Luca

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

{ 'Flavio' : { 'Outdoor' : 1 , 'Indoor' : 0 } , 'Luca' : {'Outdoor' : 0 , 'Indoor' : 2} } 

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

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 20 февраля 2020

Использование crosstab с DataFrame.to_dict:

d = pd.crosstab(df['Court'],df['Winner']).to_dict()
print (d)
{'Flavio': {'Indoor': 0, 'Outdoor': 1},
 'Giovanni': {'Indoor': 1, 'Outdoor': 0}, 
 'Luca': {'Indoor': 2, 'Outdoor': 0}}
3 голосов
/ 20 февраля 2020

Вы можете сделать это с pivot_table и to_dict:

import pandas as pd
import numpy as np
df = pd.DataFrame({'Location':['France','France','France','France'],
                   'Court':['Outdoor','Indoor','Indoor','Indoor'],
                   'Winner':['Flavio','Luca','Giovanni','Luca']})
df = pd.pivot_table(df,values='Location',columns='Winner',index='Court',aggfunc='count',fill_value=0)
a = df.to_dict()
print(a)

Выход:

{'Flavio': {'Indoor': 0, 'Outdoor': 1}, 'Giovanni': {'Indoor': 1, 'Outdoor': 0}, 'Luca': {'Indoor': 2, 'Outdoor': 0}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...