我有一个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"},
]