具有层次结构的扁平化数据框到嵌套字典

Flattened data frame with hierarchical structure to nested dictionary

我有一个 Pandas 数据框,如下所示:

Parent_id    Child_id Descr
1            2        Tom
1            3        Mark
1            4        Tony
2            5        Eddy
2            6        Lisa
3            7        Anna
3            8        Maria
7            9        Ali

Desired Output 是这样的嵌套列表字典组合格式(我需要将其作为 JSON 传递给树视图生成器)。 我不知道如何创建它,因为我事先不知道结构的深度。

我所知道的是 id 1 是所有其他 id 的父级,我不需要包括它。数据框行不一定按层级排序。

[{ id: 2,
   descr: Tom,
   nodes: [{id: 5,
            descr: Eddy},
           {id: 6,
            descr: Lisa}
          ]
 },
 { id: 3,
   descr: Mark,
   nodes: [{id: 7,
            descr: Anna,
            nodes: [{id: 9,
                     descr: Ali
                    }]
           },
           {id: 8,
            descr: Maria}
           ]
 { id: 4,
   descr: Tony}
]

提前感谢您的帮助!

尝试:

def tree(df, parent=1):
    out = []
    for _, row in df[df.Parent_id == parent].iterrows():
        out.append(
            {
                "id": row["Child_id"],
                "descr": row["Descr"],
                "nodes": tree(df, parent=row["Child_id"]),
            }
        )
        if not out[-1]["nodes"]:
            del out[-1]["nodes"]
    return out


print(tree(df))

打印:

[
    {
        "id": 2,
        "descr": "Tom",
        "nodes": [{"id": 5, "descr": "Eddy"}, {"id": 6, "descr": "Lisa"}],
    },
    {
        "id": 3,
        "descr": "Mark",
        "nodes": [
            {"id": 7, "descr": "Anna", "nodes": [{"id": 9, "descr": "Ali"}]},
            {"id": 8, "descr": "Maria"},
        ],
    },
    {"id": 4, "descr": "Tony"},
]