Родитель |Дочерний DataFrame для сбалансированной иерархии - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь взять Фрейм данных с двумя столбцами, Родителем и Дочерним, и эффективно «сплющить» его.

Вход

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...