将具有层次结构的扁平数据帧转换为嵌套字典



我有一个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是一个嵌套的列表dict组合格式,如下所示(我需要将其作为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"},
]

最新更新