2017-08-03 102 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

相关问题