给定以下Pandas DataFrame(原始DataFrame有200多行):

import pandas as pd
df = pd.DataFrame({
    'child': ['Europe', 'France', 'Paris','North America', 'US', 'Canada'],
    'parent': ["", 'Europe', 'France',"", 'North America', 'North America'],
    'value': [746.4, 67.75, 2.16, 579,331.9, 38.25]
})

df

|---+---------------+---------------+--------|
|   | child         | parent        |  value |
|---+---------------+---------------+--------|
| 0 | Europe        |               | 746.40 |
| 1 | France        | Europe        |  67.75 |
| 2 | Paris         | France        |   2.16 |
| 3 | North America |               | 579.00 |
| 4 | US            | North America | 331.90 |
| 5 | Canada        | North America |  38.25 |
|---+---------------+---------------+--------|

我想生成以下JSON树:

  [
      {
      name: 'Europe',
      value: 746.4,
      children: [
          {
          name: 'France',
          value: 67.75,
          children: [
              {
              name: 'Paris',
              value: 2.16
              }
          ]
          }
      ]
      },
      {
      name: 'North America',
      value: 579,
      children: [
          {
          name: 'US',
          value: 331.9,
          },
          {
          name: 'Canada',
          value: 38.25
          }
      ]
      }
  ];

这棵树将被用作ECharts可视化的输入,例如这basic sunburst chart.

推荐答案

有一个名为bigtree的图书馆,它可以做你正在寻找的事情.

import json
import bigtree

# Set the parent values for children without parents to ROOT
df["parent"] = df["parent"].replace(r'^$', "ROOT", regex = True)

tree = bigtree.dataframe_to_tree_by_relation(df, "child", "parent")
# tree.show(all_attrs = True)

# Convert to dict and discard the ROOT key
tree_dict = bigtree.tree_to_nested_dict(tree, all_attrs = True)["children"]

# Convert the dict to the desired string format
print(json.dumps(tree_dict, indent = 2))

另请参阅:Read data from a pandas DataFrame and create a tree using anytree in python

Json相关问答推荐

使用SQL查询从SON中查找第n个密钥对值

如何使用JQ将JSON字符串替换为解析后的类似功能?

Jolt需要将缺少的值设置为空并保持相同的位置

Postgres Select json数组并重新映射属性名称

VBA json按特定属性名称提取所有数据

bash用jq获取第二条JSON记录

NoneType 对象的 Python 类型错误

为什么 Django Rest API 序列化器没有正确序列化多对多字段

JSON 的自定义编组器,可以是字符串或 map[string]string / map[string]bool

父键中的 Perl JSON 数组

JOLT 获取带有动态键的数组

如何实现一个通用的 serde_json::from_str

以 JSON 格式访问(新型、公共)Google 工作表

Android 上的 JSON - 序列化

Python - 如何将 JSON 文件转换为数据框

如何从Typescript 中的json响应中获取日期对象

在 Http Header 中使用 Json 字符串

C#扁平化json struct

如何判断 JSON 响应元素是否为数组?

Jersey 2.0 相当于 POJOMappingFeature