从Python的数据框中创建原点-目的地矩阵

问题描述 投票:0回答: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

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

python dataframe o-d-matrix
1个回答
0
投票

您可以将pivot_tablelen的聚合函数一起使用来构建矩阵:

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
© www.soinside.com 2019 - 2024. All rights reserved.