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-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
怎么做?多谢
解决方案
以下是一个解决方案。
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)
推荐阅读
- django - Django从html模板中的视图循环列表
- angular - ng2-file-upload 不适用于 Angular 6
- java - 将 android studio 更新到 3.2 后出现错误
- solace - 硬件清单脚本-Solace Appliances
- java - HSSFWorkbook - 为不同的值编写带有单独列的 excel 数据
- ios - KVO 不适用于 NSManagedObject 的自定义属性
- mesh - 为什么使用选项'删除未引用的顶点后所有顶点都被删除
- angular - 多个订阅角度 6
- xamarin - Xamarin.Forms Sip:发出拨出呼叫时出现“内部服务器错误 500”
- python-3.x - 通过 pip 安装 librosa 失败