如何使用python从距离矩阵制作OD对字典?

问题描述

我有一个来自excel工作簿的流矩阵,该矩阵向我显示了货物在两点之间的移动,类似于此:


  1 2 3 ... n
1 0 7 8    
2 5 0 3     .
3 6 9 0     .
.        .  .
.  ...    .
.          .
n           0

我正在尝试创建一个字典,其中每个键都由每个Origin-Destination对组成,如下所示:

{(1,1):0; 
 (1,2):7; 
 (1,3):8; 
  ...; 
 (3,2):9; 
 (3,3):0;
  ...;
 (n-1,n-1): x
 (n,n): 0}

任何想法和帮助将受到高度赞赏!

到目前为止,我所做的是:

import pandas as pd

#Data Commodities#
Kdata= pd.read_excel('turquia.xls',sheet_name = 'Flow')
K = {}
for i in Kdata:
    for j in Kdata:
      K.update({(i,j):Kdata[i]})

我正在获取一个具有OD对的字典,但是它在所有元素中插入了所有距离:

`

Name: 12,Length: 81,dtype: float64,(12,13): 
 0     7115.284948
 1     2356.131379
 2     3077.130525
 3     1994.241678
 4     1374.186546
 ...   
 76     632.489214
 77     845.193097
 78     430.053121
 79    1728.571316
 80    1181.537133

`

解决方法

这只是unstack()中的to_dict() pandas

import pandas as pd
import io
df = pd.read_csv(io.StringIO("""id  1 2 3 
1 0 7 8    
2 5 0 3
3 6 9 0"""),sep="\s+").set_index("id")

df.unstack().to_dict()

输出

{('1',1): 0,('1',2): 5,3): 6,('2',1): 7,2): 0,3): 9,('3',1): 8,2): 3,3): 0}