父|子数据帧到平衡层次结构

2024-04-16 11:43:54 发布

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

我试图用一个包含两列的数据框,一个父列和一个子列,并有效地“展平”它。你知道吗

输入

Parent | Child
A         B
A         C
C         D
D         E
B         T

输出

level0 | level1 | level2 | level3
A         B         T
A         C         D        E

到目前为止,我能找到的唯一方法是将数据帧转换为元组列表,并运行如下操作:

test = []
parents = set()
children = {}
for c,p in ancestry2:
    #print(c,p)
    parents.add(p)
    children[c] = p

# recursively determine parents until child has no parent
def ancestors(p):
    return (ancestors(children[p]) if p in children else []) + [p]

# for each child that has no children print the geneology
for k in (set(children.keys()) - parents):
    #print(k)
    test.append(ancestors(k))
    print('/'.join(ancestors(k)))

但这会导致“RecursionError:maximum recursion depth exceeded”,如果增加递归限制,Python显然会崩溃。我总共要处理10万张唱片。你知道吗

有什么想法吗?有没有更好的方法让亲子关系“扁平化”?你知道吗

我想把它转移到SQL上,使用CTE来达到预期的效果会更容易。。但是我想学习如何在Python中实现这一点。你知道吗


Tags: 数据方法nointestchildforhas