2017-01-06 5 views
1

エッジにウェイトを累積して累積したいnetworkxグラフを描画しています。以下のコードは、エッジの最後の重みだけではなく、累積合計を取得します。 5つのノードと3つのエッジがあります。エッジは('A', 'B'), ('A', 'D'),('C', 'E')であり、重みは[1, 1, 1]です。体重が欲しいのは[2, 2, 1]ではなく、[1, 1, 1]です。助けが必要。 Tks。累積合計を持つエッジのNetworkxウェイト

1.グラフを描くDF

import pandas as pd 
import networkx as nx 
ints = [1] * 5 
a = ['A', 'B', 'C', 'A', 'A'] 
b = ['D', 'A', 'E', 'D', 'B'] 
df = pd.DataFrame(ints, columns=['weight']) 
df['a'] = a 
df['b'] = b 
df 

    weight a b 
0 1  A D 
1 1  B A 
2 1  C E 
3 1  A D 
4 1  A B 

2を作成します。

G=nx.from_pandas_dataframe(df, 'a', 'b', ['weight']) 
edges = G.edges() 
weights = [G[u][v]['weight'] for u,v in edges] 
pos = nx.circular_layout(G) 
nx.draw(G, pos, with_labels=True, width=weights) 

enter image description here

答えて

1

だから、私はあなたが、少なくともドキュメントに簡単に見た後、nx.from_pandas_dataframeと直接累積和を行うことができるとは思いません。

pandasで行うことができます。networkxに渡すことができます。

あなたは重みが[2,2,1]になりたいと言ったので、それはあなたが無向ようなグラフを検討していることなので、あなたがその最初を確保する必要があります:

df["a'"] = pd.DataFrame([df["a"], df["b"]]).min() 
df["b'"] = pd.DataFrame([df["a"], df["b"]]).max() 

次にあなたが累積和を行うことができますgroupbyシンプルで:

012:

この時点で
df = df.groupby(by = ["a'", "b'"]).sum().reset_index() 

dfは正しくnx.from_pandas_dataframeによって変換されます

+0

グレート、@Mikk、TKS。 –