2017-08-03 143 views
1

這是一個組合和熊貓的小練習。用另一個數據框(組合)的值填充熊貓數據框

我目前有一個像這樣的熊貓數據框:

| node1 |節點2 |距離|
|悉尼|堪培拉| 100 |
| Melbourne |悉尼| 200 |
|堪培拉|墨爾本| 150 |

然後我創建一個新的數據框,所以列標題和行名稱是節點的唯一值。

mat = pd.DataFrame(index = np.unique(df.node1), columns = np.unique(df.node1)) 

node1或node2在這裏就足夠了,因爲在構建數據框時順序無關緊要。

哪些產生我想要的,但填充NaN值。

我該如何使用distance列中的值填充墊子而不寫一些醜陋的循環?

感謝

+0

由'node1'創建的列和索引? – jezrael

+0

你可以添加組合數據幀嗎? – Dark

回答

1

首先使用pivotset_indexunstack

mat = df.pivot(index='node1', columns='node2', values='distance') 
print (mat) 
node2  Canberra Melbourne Sydney 
node1         
Canberra  NaN  150.0  NaN 
Melbourne  NaN  NaN 200.0 
Sydney  100.0  NaN  NaN 

mat = df.set_index(['node1', 'node2'])['distance'].unstack() 
print (mat) 
node2  Canberra Melbourne Sydney 
node1         
Canberra  NaN  150.0  NaN 
Melbourne  NaN  NaN 200.0 
Sydney  100.0  NaN  NaN 

然後用Tcombine_first

mat = mat.combine_first(mat.T) 
print (mat) 
      Canberra Melbourne Sydney 
node1         
Canberra  NaN  150.0 100.0 
Melbourne  150.0  NaN 200.0 
Sydney  100.0  200.0  NaN 
+0

謝謝@jezrael我忘記了關鍵。另外的問題,有沒有一種方法可以填充反過來悉尼 - >堪培拉= 100好!但也填充堪培拉 - >悉尼= 100? – mike

+0

事實上,如果我讓mat2 = df.pivot(index ='node2',columns ='node1',values ='distance'),我會得到相反的結果。現在我需要一種方法來合併這兩個數據框。 – mike

+1

是的,或者使用'df1.combine_first(df2' – jezrael