我有一个包含以下列的DataFrame,没有重复项:
['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
...
其中region
,type
,name
对应于层次结构的不同级别(由i
,j
和k
索引<) / p>
Pandas / Python有一种简单的方法吗?
答案 0 :(得分: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。
答案 1 :(得分:1)
这是另一个获取pandas df并输出flare.json文件的脚本:https://github.com/andrewheekin/csv2flare.json