2017-10-07 196 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和第二列的第一列邊緣列表顯示直接連接到第一個節點的節點。 鑑於是column 1作爲node1column 2作爲node2和重量的邊緣列表。 我想創建一個矩陣,每行代表給定節點的所有直接邊。 (每一行都是一個節點,其中的列是給定節點的直接邊)使用Pandas Dataframe。

輸出:

8 16 22 

5 25 0 

0 0 0 

0 0 0 

10 0 0 
+0

沒有行是96000.But我可以解釋數據更多,如果你想 –

回答

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

你能解釋reindex步驟? –

+0

@ChaitaliSarkar檢查編輯 – Wen