Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get branch of a networkx graph as a list from pandas dataframe in Python?

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: enter image description here

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?

like image 455
hbstha123 Avatar asked Oct 28 '25 20:10

hbstha123


1 Answers

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.

like image 126
hbstha123 Avatar answered Oct 31 '25 09:10

hbstha123



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!