У меня есть данные, которые содержат список значений узлов (кортежей), таких как:
DF1:
NAME , FROMNODE, TONODE , CHILDREN
V1 , (8,9) (0,1) , [(1,2)]
V2 , (0,1) (1,2) , []
В приведенном выше примере V2 является дочерним по отношению к V1.
ИМЯ является строкой
FROMNODE - это кортежи
TONODE - это кортежи
ДЕТИ - это список кортежей
Я пытаюсь создать столбец с именем PARENTS, который будет представлять собой список строк из NAME, в котором FROMNODE текущей записи сопоставляется в столбце CHILDREN другой записи.
Вот пример того, чего я пытаюсь достичь:
NAME , FROMNODE, TONODE , CHILDREN , PARENTS
V1 , (8,9) (0,1), [(1,2)] , []
V2 , (0,1) (1,2), [] , [V1]
Я пытался сделать это с пониманием списка следующим образом:
[[name for name in DF1.NAME if child_node in [node_list for node_list in DF1.CHILDREN]] for child_node in DF1.FROMNODE]
Это действительно очень долго. Можно ли как-нибудь быстрее получить желаемый результат?
Edit:
Так что я чувствую себя по-настоящему глупо, я уже создал графа между узлами, используя поиск в глубину, и я не осознавал, что график был двунаправленным. Я просто применил ту же логику, которую использовал для нахождения столбца ДЕТИ на РОДИТЕЛЯХ, и это решило проблему в разумные сроки, вместо того, чтобы попытаться сделать так, чтобы блок данных строил ссылку на себя.