我有一个数据框,其中包含节点值(元组)的列表,例如:
DF1:
NAME , FROMNODE, TONODE , CHILDREN
V1 , (8,9) (0,1) , [(1,2)]
V2 , (0,1) (1,2) , []
在上面的示例中,V2是V1的子级。
NAME是一个字符串
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]
这真的花了很长时间。有什么办法可以更快地获得预期的结果吗?
编辑:
所以我真的很傻,我已经使用深度优先搜索创建了一个节点到节点图,但我没有意识到该图是双向的。我只是简单地应用了与在PARENTS上找到CHILDREN列相同的逻辑,因此在合理的时间内解决了该问题,而不是试图使数据框自己建立引用。