从数据帧转换到矩阵有可能吗?

2024-10-01 19:21:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的新手, 我有一个巨大的dataframe

Person  OD
A       BS1
A       BS2
B       BS4
B       BS8
C       BS5
C       BS1
D       BS9
D       BS7
E       BS2
E       BS7
F       BS2
F       BS1
G       BS1
G       BS2

在python中是否可以转换成一个起点-终点(OD)矩阵?例如从BS1到BS2有2个人(A和G),然后在OD矩阵中有2个人进入BS1-BS2。你知道吗

我的预期结果:

O/D BS1 BS2 BS3 BS4 BS5 BS6 BS7 BS8 BS9
BS1     2                           
BS2 1                       1       
BS3                                 
BS4                             1   
BS5 1                               
BS6                                 
BS7                                 
BS8                                 
BS9                         1   

怎么做?多谢了


Tags: dataframe矩阵person起点新手odbs4bs3
1条回答
网友
1楼 · 发布于 2024-10-01 19:21:10

下面是一个解决方案。你知道吗

places = df["OD"].unique()
places.sort()
od_df = pd.DataFrame(df["OD"].values.reshape((-1, 2)), columns=["O", "D"])
od_matrix = od_df.groupby(["O", "D"]).size().unstack().reindex(index=places, columns=places)
od_matrix.fillna(0, downcast="infer", inplace=True)

也可以使用pd.pivot_table并将第四行替换为

od_matrix = pd.pivot_table(od_df, index="O", columns="D", aggfunc="size").reindex(index=places, columns=places)

相关问题 更多 >

    热门问题