【发布时间】:2018-07-25 21:12:35
【问题描述】:
我有一个父子关系列表,其中结构不是真正的树。有些父母可以有很多孩子,也有些孩子可以有多个父母。
import pandas as pd
df = pd.DataFrame([[123,234],[123,235],[123,236],[124,236],[234,345],[236,346]], columns=['Parent','Child'])*
我想将所有孩子归为特定祖先。从数据来看:
123,234,235,236,345,346
124,235,346
应该是正确的组。
我试过了:
parents = set()
children = {}
for p, c in df.to_records(index=False).tolist():
parents.add(p)
children[c] = p
def getAncestors(p):
return (getAncestors(children[p]) if p in children else []) + [p]
但在 346 上它只返回一组。
另外,如何找到 123 和 124 的所有孩子?
谢谢!
【问题讨论】:
-
你考虑过使用像 networkx 这样的库吗?
-
确定不是任何其他节点的子节点的节点,然后从每个节点执行 DFS?
-
其实用networkx解决了这个问题。创建了 MultiDiGraph,转换为 Graph 以创建集群,然后应用 nx.ancestors 来获取父母。感谢您为我指明这个方向!