Construct NetworkX graph from Pandas DataFrame

前端 未结 3 1902
野趣味
野趣味 2020-12-08 08:28

I\'d like to create some NetworkX graphs from a simple Pandas DataFrame:

        Loc 1   Loc 2   Loc 3   Loc 4   Loc 5   Loc 6   Loc 7
Foo     0       0              


        
3条回答
  •  一整个雨季
    2020-12-08 09:17

    You can also use scipy to create the square matrix like this:

    import scipy.sparse as sp
    
    cols = df.columns
    X = sp.csr_matrix(df.astype(int).values)
    Xc = X.T * X  # multiply sparse matrix
    Xc.setdiag(0)  # reset diagonal
    
    # create dataframe from co-occurence matrix in dense format
    df = pd.DataFrame(Xc.todense(), index=cols, columns=cols)
    

    Later on you can create an edge list from the dataframe and import it into Networkx:

    df = df.stack().reset_index()
    df.columns = ['source', 'target', 'weight']
    
    df = df[df['weight'] != 0]  # remove non-connected nodes
    
    g = nx.from_pandas_edgelist(df, 'source', 'target', ['weight'])
    

提交回复
热议问题