使用 pandas 在 python 中实现父子路径层次结构

问题描述 投票:0回答:1

我正在尝试在新的 pandas 列中获取子父层次结构。目前我的代码看起来像这样,但它搜索所有父母,但它应该搜索相应行中的父母。

这是它应该如何工作的示例。

基表:

CHILD_ID PARENT_ID
ITEM_1 ITEM_A
ITEM_2 ITEM_B
ITEM_A ITEM_X
ITEM_A ITEM_Y
ITEM_B ITEM_Z

第一次迭代

CHILD_ID PARENT_ID 层次结构
ITEM_1 ITEM_A ITEM_1、ITEM_A
ITEM_2 ITEM_B ITEM_2、ITEM_B
ITEM_A ITEM_X ITEM_A、ITEM_X
ITEM_A ITEM_Y ITEM_A、ITEM_Y
ITEM_B ITEM_Z ITEM_B、ITEM_Z

第二次迭代

CHILD_ID PARENT_ID 层次结构
ITEM_1 ITEM_A ITEM_1、ITEM_A、ITEM_X
ITEM_1 ITEM_A ITEM_1、ITEM_A、ITEM_Y
ITEM_2 ITEM_B ITEM_2、ITEM_B、ITEM_Z
ITEM_A ITEM_X ITEM_A、ITEM_X
ITEM_A ITEM_Y ITEM_A、ITEM_Y
ITEM_B ITEM_Z ITEM_B、ITEM_Z

我正在努力实现这个结果,这是我的代码:

def get_parents(child_id):
    list_of_parents = []

    def dfs(child_id, parents_list):
        parent_ids = df[df["child_id"] == child_id]["parent_id"].values
        if len(parent_ids) == 0:
            return
        for parent_id in parent_ids:
            if parent_id not in parents_list:
                parents_list.append(parent_id)
                dfs(parent_id, parents_list)

    dfs(child_id, list_of_parents)
    return list_of_parents

df["parent_hierarchy"] = df["child_id"].apply(get_parents)
python pandas recursion parent-child hierarchical-data
1个回答
0
投票

usw 数据帧操作和递归函数的组合。 这是一个新代码,您应该能够在加载数据后实现它

def get_hierarchy(child_id, hierarchy=[]):
    hierarchy.append(child_id)
    parent_id = df.loc[df["CHILD_ID"] == child_id, "PARENT_ID"].values
    if len(parent_id) > 0:
        get_hierarchy(parent_id[0], hierarchy)
    return hierarchy

df["Hierarchy"] = df["CHILD_ID"].apply(get_hierarchy)
© www.soinside.com 2019 - 2024. All rights reserved.