如何使用python从距离矩阵生成OD对字典?

如何使用python从距离矩阵生成OD对字典?,python,dictionary,matrix,distance,od,Python,Dictionary,Matrix,Distance,Od,我有一个excel工作簿中的流量矩阵,它显示了货物在两个点之间的移动情况,类似于: 我正在尝试创建一个字典,其中每个键由每个源-目标对组成,如下所示: {(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=

我有一个excel工作簿中的流量矩阵,它显示了货物在两个点之间的移动情况,类似于:



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

{(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对的字典,但它在每个元素中插入了所有距离:

`


`

这只是一个简单的
unstack()
pandas中的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}

发布您尝试过的代码`导入熊猫作为pd#数据商品#Kdata=pd.read_excel('turquia.xls',sheet_name='Flow')K={}用于Kdata中的i:j,用于Kdata中的j: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 `您的输出错误
(1,2)->7
(2,1)->5
如果你想让它成为行主调,只需先将df.T.unstack()转换为_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}