我想从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中完成。非常感谢您的帮助。
您可以将pivot_table
与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