上级子DataFrame到平衡的层次结构

时间:2018-10-05 20:48:03

标签: python dataframe recursion

我正在尝试采用包含父级和子级两列的数据框,并有效地“展平”它。

输入

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

输出

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

到目前为止,我唯一能弄清楚的方法是将DataFrame转换为元组列表并运行类似的内容:

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:超出最大递归深度”,如果我增加了递归限制,Python显然会崩溃。我总共要处理<100k条记录。

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

我想将其移至SQL并使用CTE来达到预期的效果会更容易..但我想学习如何在Python中做到这一点。

0 个答案:

没有答案