#python #json #pandas
#python #json #панды
Вопрос:
Я хочу вывести фрейм данных путем группировки по первым 2 столбцам в формате словаря. Это мой фрейм данных:
COMUNIDAD PROVINCIA EMPLAZAMIENTO
0 ANDALUCIA ALMERIA ALMERIA
1 ANDALUCIA ALMERIA EJIDO, EL
2 ANDALUCIA ALMERIA HUERCAL OVERA
3 ANDALUCIA ALMERIA PECHINA
4 ANDALUCIA ALMERIA VELEZ BLANCO
... ... ... ...
246 VALENCIA VALENCIA COFRENTES
247 VALENCIA VALENCIA MONDUBER
248 VALENCIA VALENCIA ONTENIENTE
249 VALENCIA VALENCIA PICAYO
250 VALENCIA VALENCIA UTIEL
и я хочу, чтобы этот вывод:
{
"ANDALUCIA":{
"ALMERIA":[
"ALMERIA",
"EJIDO, EL",
...
],
"CADIZ":[
"JEREZ DE LA FRONTERA",
...
]
},
"ARAGON":{
"HUESCA":[
"ARGUIS",
...
],
...
},
...
}
Каков наилучший способ добиться этого через pandas?
Ответ №1:
Используйте GroupBy.agg
для списков, а затем создайте вложенный словарь:
s = df.groupby(['COMUNIDAD','PROVINCIA'])['EMPLAZAMIENTO'].agg(list)
d = {level: s.xs(level).to_dict() for level in s.index.levels[0]}
print (d)
{'ANDALUCIA': {'ALMERIA': ['ALMERIA', 'EJIDO, EL',
'HUERCAL OVERA', 'PECHINA', 'VELEZ BLANCO']},
'VALENCIA': {'VALENCIA': ['COFRENTES', 'MONDUBER',
'ONTENIENTE', 'PICAYO', 'UTIEL']}}
Последнее для использования json:
import json
j = json.dumps(d)
print (j)
{"ANDALUCIA": {"ALMERIA": ["ALMERIA", "EJIDO, EL",
"HUERCAL OVERA", "PECHINA", "VELEZ BLANCO"]},
"VALENCIA": {"VALENCIA": ["COFRENTES", "MONDUBER",
"ONTENIENTE", "PICAYO", "UTIEL"]}}
Комментарии:
1. идеально, именно то, что мне было нужно