I have a pandas dataframe df which looks as follows:
From To
0 Node1 Node2
1 Node1 Node3
2 Node2 Node4
3 Node2 Node5
4 Node3 Node6
5 Node3 Node7
6 Node4 Node8
7 Node5 Node9
8 Node6 Node10
9 Node7 Node11
df.to_dict() is:
{'From': {0: 'Node1',
1: 'Node1',
2: 'Node2',
3: 'Node2',
4: 'Node3',
5: 'Node3',
6: 'Node4',
7: 'Node5',
8: 'Node6',
9: 'Node7'},
'To': {0: 'Node2',
1: 'Node3',
2: 'Node4',
3: 'Node5',
4: 'Node6',
5: 'Node7',
6: 'Node8',
7: 'Node9',
8: 'Node10',
9: 'Node11'}}
I have plotted this pandas dataframe as a network graph using networkx package which looks as follows:

I want to get the list of unique scenarios/branches from this network graph. There are four branches here starting from Node1.
Node1-Node2-Node4-Node8
Node1-Node2-Node5-Node9
Node1-Node3-Node6-Node10
Node1-Node3-Node7-Node11
How can I get the list of the branches above from the given pandas dataframe in Python?
An alternative approach to solve this using the networkx package.
import networkx as nx
G = nx.DiGraph()
G.add_edges_from((r.From, r.To) for r in df.itertuples())
roots = [n for (n, d) in G.in_degree if d == 0]
print(roots)
leafs = [n for (n, d) in G.out_degree if d == 0]
print(leafs)
df1 = pd.DataFrame(nx.algorithms.all_simple_paths(G, roots[0], leafs))
for index in df1:
print (df1.loc[index].to_list())
A directed graph is created and the edges are added to it from df. Node 1 is the only node in G, where the in_degree is equal to 0, i.e. it is the root of the entire graph. Therefore, roots is equal to Node 0.
leafs imply the nodes at the directed graph at which out_degree is equal to 0. i.e., ["Node8", "Node9", "Node10", "Node11"].
nx.algorithms.all_simple_paths(G, roots[0], leafs) provide all the paths starting from Node 1 and ending at each of the nodes in leafs.
Each row of the dataframe df1 is printed as a list using the for-loop statement.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With