2014-05-08 26 views
8

Tôi có một DataFrame với các cột sau và không có bản sao:Pandas to D3. Serializing dataframes để JSON

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

có thể được xem như một hệ thống phân cấp như sau

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

Tôi muốn serialize hệ thống cấp bậc này như một Đối tượng JSON.

Nếu có ai quan tâm, động lực đằng sau điều này là cuối cùng cùng nhau đưa ra một hình ảnh như this one yêu cầu tệp JSON.

Để làm như vậy, tôi cần phải chuyển đổi grouped như sau:

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

nơi region, type, name tương ứng với mức độ khác nhau của hệ thống phân cấp (lập chỉ mục bởi i, jk)

Có cách nào dễ dàng trong Pandas/Python để làm điều này?

Trả lời

3

Điều gì đó dọc theo những dòng này có thể đưa bạn đến đó.

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) 

Một giải pháp vector hóa sẽ tốt hơn và có thể tận dụng được tốc độ của nhóm, nhưng tôi không thể nghĩ ra giải pháp như vậy.

Ngoài ra, hãy xem df.groupby(...).groups, trả về một mệnh đề.

Xem thêm this answer.

Các vấn đề liên quan