分层结构的扁平数据帧到嵌套字典

2024-05-26 21:54:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,看起来像这样:

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

所需的输出是这样的嵌套列表dict组合格式(我需要将其作为JSON传递给treeview构建器)。 我不知道如何创建它,因为我事先不知道结构的深度

我知道的是,ID1是所有其他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}
]

提前谢谢你的帮助


Tags: 数据idchildaliparentnodesmarklisa
1条回答
网友
1楼 · 发布于 2024-05-26 21:54:33

尝试:

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"},
]

相关问题 更多 >

    热门问题