如何用Python Pandas制作含多个自变量的列联表?
生成包含多个自变量的列联表方法
不用分别生成再合并,pandas 提供了直接生成多自变量列联表的方式,分两种场景给你具体实现方法:
场景1:生成多层列结构的多自变量列联表
如果需要展示因变量与多个自变量所有取值组合的频数,可以直接在 pd.crosstab 的 columns 参数里传入多个自变量的列表,生成多层列的交叉表。
示例代码:
import pandas as pd # 模拟你的样本数据 data = { 'Dvar': [0, 1, 0, 1, 0, 1], 'Var1': ['A', 'B', 'A', 'A', 'B', 'A'], 'Var2': ['X', 'Y', 'X', 'Y', 'X', 'Y'], 'Var3': ['M', 'F', 'F', 'M', 'M', 'F'] } table = pd.DataFrame(data) # 直接传入多个自变量到columns参数 multi_level_crosstab = pd.crosstab( index=table['Dvar'], columns=[table['Var1'], table['Var2'], table['Var3']] ) print(multi_level_crosstab)
输出会是一个多层列的表格,每一列对应 Var1、Var2、Var3 的一个取值组合,单元格是该组合下的频数。
场景2:生成并排展示的多自变量列联表
如果希望把每个自变量与因变量的列联表并排合并成一个大表,可以先通过 pd.melt 将数据转成长格式,再做交叉表。
示例代码:
# 将数据转成长格式:把3个自变量合并成"自变量"和"取值"两列 melted_data = pd.melt( table, id_vars='Dvar', # 保留因变量作为标识 value_vars=['Var1', 'Var2', 'Var3'], # 指定要转换的自变量列 var_name='自变量名称', value_name='取值' ) # 生成并排的列联表 side_by_side_crosstab = pd.crosstab( index=melted_data['Dvar'], columns=[melted_data['自变量名称'], melted_data['取值']] ) print(side_by_side_crosstab)
这种方式的输出会把每个自变量的列联表部分整合在一起,列结构是「自变量名称+取值」,方便对比不同自变量与因变量的分布关系。
内容的提问来源于stack exchange,提问作者YoungboyVBA
相关产品推荐
相关产品推荐

