2014-05-08 10 views
8

Ich habe einen Datenrahmen mit den folgenden Spalten und keine Duplikate:Pandas zu D3. Serialisierung von Datenrahmen zu JSON

['region', 'type', 'name', 'value'] 

, die als Hierarchie gesehen werden kann als

grouped = df.groupby(['region','type', 'name']) 

folgt würde Ich mag diese Hierarchie als serialisiert JSON-Objekt.

Wenn jemand interessiert ist, ist die Motivation dahinter, schließlich eine Visualisierung wie this one, die eine JSON Datei erfordert.

dies zu tun, müssen I grouped in die folgende umgewandelt:

new_data['children'][i]['name'] = region 
new_data['children'][i]['children'][j]['name'] = type 
new_data['children'][i]['children'][j]'children'][k]['name'] = name 
new_data['children'][i]['children'][j]'children'][k]['size'] = value 
... 

wo region, type, name auf verschiedenen Ebenen der Hierarchie entsprechen (indexiert durch i, j und k)

Gibt es einen einfachen Weg in Pandas/Python, dies zu tun?

Antwort

3

Etwas in diese Richtung könnte Sie dorthin bringen.

from collections import defaultdict 

tree = lambda: defaultdict(tree) # a recursive defaultdict 
d = tree() 
for _, (region, type, name, value) in df.iterrows(): 
    d['children'][region]['name'] = region 
    ... 

json.dumps(d) 

Eine vektorisierte Lösung wäre besser, und vielleicht etwas, das die Vorteile der Geschwindigkeit von groupby nimmt, aber ich kann eine solche Lösung nicht denken.

Schauen Sie sich auch df.groupby(...).groups an, die ein dict zurückgeben.

Siehe auch this answer.

Verwandte Themen