如何使用 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}
我有一个来自 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}