2014-05-08 55 views
8

我有以下的列和無重複一個數據幀:熊貓到D3。序列化dataframes以JSON

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

,可以如下

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

我想序列化這個層次中被視爲一個層次JSON對象。

如果有人有興趣,其背後的動機是最終將像this one這樣的可視化文件放在一起,這需要JSON文件。

要做到這一點,我需要grouped轉換成以下:

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 
... 

其中regiontypename對應不同級別層次的

(由ijk索引) Pandas/Python有沒有簡單的方法來做到這一點?

回答

3

沿着這些線的東西可能會讓你在那裏。

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) 

矢量化的解決方案會更好,也許這些東西把GROUPBY的速度優勢,但我不認爲這樣的解決方案的。

也看看df.groupby(...).groups,它返回一個字典。

另請參閱this answer