我建议您使用networkx,因为这是一个图形问题。特别是后代函数:
import networkx as nximport pandas as pddata = [['A', 'B', 0, 1], ['B', 'C', 1, 2], ['B', 'D', 1, 2], ['X', 'Y', 0, 2], ['X', 'D', 0, 2], ['Y', 'Z', 2, 3]]df = pd.Dataframe(data=data, columns=['parent', 'child', 'parent_level', 'child_level'])roots = df.parent[df.parent_level.eq(0)].unique()dg = nx.from_pandas_edgelist(df, source='parent', target='child', create_using=nx.DiGraph)result = pd.Dataframe(data=[[root, nx.descendants(dg, root)] for root in roots], columns=['root', 'children'])print(result)
输出量
root children0 A {D, B, C}1 X {Z, Y, D}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)