Я пытаюсь взять Фрейм данных с двумя столбцами, Родителем и Дочерним, и эффективно «сплющить» его.
Вход
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 падает.Я имею дело с <100 тысячами записей. </p>
Есть мысли?Есть ли лучший способ «сгладить» отношения родитель-потомок?
Полагаю, было бы проще перенести это на SQL и использовать CTE для достижения желаемого эффекта ... но я бы хотел узнатькак это сделать в Python.