这是组合和熊猫的一个小练习。
我目前有一个pandas数据框,如:
| node1 |节点2 |距离|
|悉尼|堪培拉| 100 |
|墨尔本|悉尼| 200 |
|堪培拉|墨尔本| 150 |
然后我创建一个新的数据框,因此列标题和行名称是节点的唯一值。
mat = pd.DataFrame(index = np.unique(df.node1), columns = np.unique(df.node1))
node1或node2就足够了,因为在构造数据帧时顺序无关紧要。
产生我想要的但充满了NaN值。
如何使用距离列的值填充mat而不写一些丑陋的循环?
由于
答案 0 :(得分:1)
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
然后combine_first
与T
:
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