首页 > 解决方案 > 是否可以从数据框转换为矩阵?

问题描述

我是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-pandas 中转换为起点-终点(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   

怎么做?多谢

标签: pythonpandasdataframematrixmultiple-columns

解决方案


以下是一个解决方案。

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)

推荐阅读