我正在尝试采用包含父级和子级两列的数据框,并有效地“展平”它。
输入
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中做到这一点。