熊猫到D3.将数据帧序列化为JSON

Ame*_*ina 8 python json pandas d3.js

我有一个包含以下列的DataFrame,没有重复项:

['region', 'type', 'name', 'value']
Run Code Online (Sandbox Code Playgroud)

可以看作层次结构如下

grouped = df.groupby(['region','type', 'name'])
Run Code Online (Sandbox Code Playgroud)

我想将此层次结构序列化为JSON对象.

如果有人感兴趣,那么这背后的动机就是最终将这样一个需要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
...
Run Code Online (Sandbox Code Playgroud)

其中region,type,name对应于不同的水平层次结构的(由索引i,jk)

在Pandas/Python中有一种简单的方法可以做到这一点吗?

Dan*_*lan 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)
Run Code Online (Sandbox Code Playgroud)

矢量化解决方案会更好,也许可以利用 groupby 的速度,但我想不出这样的解决方案。

另请看一下df.groupby(...).groups,它返回一个字典。

另请参阅此答案