具有层次结构的扁平化数据框到嵌套字典
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"},
]
我有一个 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"},
]