【问题标题】:creation of distance matrix in python在python中创建距离矩阵
【发布时间】:2022-08-17 00:01:11
【问题描述】:

我正在尝试准备一个 dijikstra 模型,我需要准备一个具有如下数据框的距离列表:

data={\'column1\':[1,1,1,1,1,1,1,1,2,2,2,2],\'person\':[\'A\',\'A\',\'A\',\'A\',\'B\',\'B\',\'B\',\'B\',\'C\',\'C\',\'C\',\'C\'],\'location1\':[\'GOA\',\'BANGLORE\',\'GOA\',\'BANGLORE\',\'BANGLORE\',\'DELHI\',\'BANGLORE\',\'DELHII\',\'KOCHI\',\'DELHI\',\'DELHI\',\'KOCHI\'],\'location2\':[\'BANGLORE\',\'GOA\',\'GOA\',\'BANGLORE\',\'DELHI\',\'DELHI\',\'BANGLORE\',\'BANGLORE\',\'DELHI\',\'KOCHI\',\'DELHI\',\'KOCHI\'],\'time\':[20,40,0,0,34,0,0,23,21,56,0,0]}

df = pd.DataFrame(data)

需要创建不同的距离矩阵。如果列值为 1 且人员为 A,则需要准备一个距离列表为 [[0,20],[40,0]]。就像那样需要column1和person中不同值的距离矩阵。

输出:

  • 你能提供完整的输出吗?
  • 更新了输出
  • 解释你如何得到你的输出。需要准备一份距离清单不是一个很好的解释。例如,为什么 C 人需要 [56, 0] 而不是 [0, 56]?

标签: python pandas dataframe dynamic-programming


【解决方案1】:

您可以在groupby 中使用pivot

(df.groupby(['column1', 'person'])
   .apply(lambda g: g.pivot('location1', 'location2', 'time').values.tolist())
)

输出:

column1  person
1        A         [[0, 40], [20, 0]]
         B         [[0, 34], [23, 0]]
2        C         [[0, 56], [21, 0]]
dtype: object

【讨论】: