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