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

How do I make a dictionary of OD pairs from a distance Matrix using python?

我有一个来自 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

`

pandas

中的unstack()to_dict()
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,
 ('1', 3): 6,
 ('2', 1): 7,
 ('2', 2): 0,
 ('2', 3): 9,
 ('3', 1): 8,
 ('3', 2): 3,
 ('3', 3): 0}