pandas Python -父子层次递归结构

ia2d9nvy  于 2023-09-29  发布在  Python
关注(0)|答案(1)|浏览(119)

我试图形成一个父到子的关系组合使用的数据在我的Pandas框架。
数据示例:
| 母|孩子|
| --|--|
| 一|B|
| 一|C|
| B| D|
| B| C|
| C| D|
预期连锁结果:
一|B
一|C
一|B| D
一|B| C
一|C| D
一|B| C| D
我试着用networkx包来追踪树。我是部分成功的。但它忽略了预期结果中显示的一些层次结构。
比如,如果子节点有关联的子节点,它不会显示为单独的结果。
例如,在上面的数据中,B是A的孩子,并且D和C是B的查尔兹。
在应用我的代码时,它显示A| B| D & A| B| C| D单独。

A| B被跳过,因为B有查尔兹(C & D)
A| B|跳过C,因为B具有查尔兹(C & D),并且随后C也具有子级(D)
A|跳过C,因为C具有子级(D)

我使用的代码显示在下面的链接
How to use recursion to record all routes in a parent child hierarchy?

fnx2tebb

fnx2tebb1#

all_simple_paths的可能解决方案:

G = nx.from_pandas_edgelist(df, # or pd.read_csv("file.csv")
    source="parent", target="child", create_using=nx.DiGraph)

root = next(nx.topological_sort(G))

out = (
    pd.Series(
        [
            list(nx.all_simple_paths(G, root, c)) for c in df["child"]
        ]
    ).explode().sort_values(key=lambda s: s.str.len())
    .drop_duplicates().str.join("|").to_frame("paths")
)

输出量:

print(out)

     paths
0      A|B
1      A|C
1    A|B|C
2    A|B|D
2    A|C|D
2  A|B|C|D

相关问题