2017-10-07 7 views
-1

サンプルデータを直接エッジ行列を作成する:がエッジリストから

data = { 
    'node1': [1, 1,1, 2,2,5], 
'node2': [8,16,22,5,25,10], 
'weight': [1,1,1,1,1], } 
df = pd.DataFrame(data, columns = ['node1','node2','weight']) 

与えられたデータは、node 1を示す第1の列とエッジリストであり、第2列は、直接最初のノードに接続されたノードを示しています。 column 1のエッジリストは、node1,column 2node2と重さがあります。 与えられたノードのすべての直接エッジを表す各行を持つ行列を作成したいと思います。 (各行はノードであり、その中の列は、与えられたノードの直接端です)、Pandas Dataframeを使用します。

出力:プットをあなたを取得するための

8 16 22 

5 25 0 

0 0 0 

0 0 0 

10 0 0 
+0

行数は96000です。しかし、もっとデータを説明することができます –

答えて

1

IIUC

df=df.assign(Cu=df.groupby('node1').cumcount()).set_index('Cu').groupby('node1').apply(lambda x : x['node2']*x['weight']).unstack('Cu').fillna(0) 
df 
Out[71]: 
Cu  0  1  2 
node1     
1  8.0 16.0 22.0 
2  5.0 25.0 0.0 
5  10.0 0.0 0.0 

、することができますreindex + fillna

編集:注意してください、あなたの予想出力contianいくつかのすべての0行、

df.reindex([1,2,3,4,5]).fillna(0) 
Out[107]: 
Cu  0  1  2 
node1     
1  8.0 16.0 22.0 
2  5.0 25.0 0.0 
3  0.0 0.0 0.0 
4  0.0 0.0 0.0 
5  10.0 0.0 0.0 
+0

再インデックスステップについて説明できますか? –

+0

@ChaitaliSarkar編集を確認する – Wen

関連する問題