1

我想从python中的以下数据框创建一个起点-终点矩阵:

Origin  Destination
1         2
1         3
1         4
2         3
3         4

我期望以下矩阵:

   1  2  3  4
1  0  1  1  1
2  0  0  1  0 
3  0  0  0  1
4  0  0  0  0

我知道它可以在 R 中使用 table() 函数完成,但我不知道如何在 python 中完成。非常感谢您的帮助。

4

1 回答 1

0

您可以使用pivot_tablewith 和聚合函数len来构建矩阵:

df.pivot_table(values='Destination', index="Origin", columns='Destination',
           fill_value=0, aggfunc=len)

这使:

Destination  2  3  4
Origin              
1            1  1  1
2            0  1  0
3            0  0  1

但是您只会发现原始矩阵中存在的起点和终点。

如果您希望每个可能的端点都有一行和一列,则必须首先构建一个空矩阵,然后添加上面的矩阵:

resul = pd.DataFrame(0, index=list(range(1,5)), columns = list(range(1,5))
                ).add(df.pivot_table(values='Destination', index="Origin",
                                     columns='Destination', aggfunc=len),
                      fill_value=0).astype('int')

这给出了预期的矩阵:

   1  2  3  4
1  0  1  1  1
2  0  0  1  0
3  0  0  0  1
4  0  0  0  0
于 2020-02-17T15:38:58.523 回答