新手 Python 问题:如何跨多个预测变量和结果变量创建交叉表
Novice Python question: How to create crosstabs across multiple predictor variables and outcome variable
使用以下包含二进制 0/1 变量的测试数据框:
test_df = pd.DataFrame([
[0, 0, 0, 1],
[1, 0, 1, 1],
[0, 0, 0, 1],
[1, 0, 1, 0],
[0, 0, 0, 0],
[1, 0, 1, 0]], columns=["y", "age_catg", "race_catg", "sex_catg"])
我想使用 pd.crosstab()
函数创建 y 与 age_catg、race_catg、sex_catg 的双向表,以便检查预测变量类别之间的 y 值完全分离。
我的实际数据框包含数千个预测变量,因此与其明确命名年龄、种族和性别预测变量,我更愿意使用列 #'s。但是,我仍然对 Python 中的行和列引用感到困惑 - 例如以下代码不起作用:
desc_tab = pd.crosstab(test_df[:,1], test_df[:,2:4])
desc_tab
要使用整数索引,您需要 iloc
方法:
pd.crosstab(test_df.iloc[:, 1], test_df.iloc[:, 2])
输出:
race_catg 0 1
age_catg
0 3 3
如果将多个 arrays/series 放在列表中,则可以将它们传递给列或行:
pd.crosstab(test_df.iloc[:, 1], [test_df.iloc[:, 2], test_df.iloc[:, 3]])
race_catg 0 1
sex_catg 0 1 0 1
age_catg
0 1 2 2 1
编辑
如果要按索引批量定义列(list是python中的保留字,请勿使用):
cols = [test_df.iloc[:, i] for i in [2, 3]]
pd.crosstab(test_df.iloc[:, 1], cols)
输出:
race_catg 0 1
sex_catg 0 1 0 1
age_catg
0 1 2 2 1
使用以下包含二进制 0/1 变量的测试数据框:
test_df = pd.DataFrame([
[0, 0, 0, 1],
[1, 0, 1, 1],
[0, 0, 0, 1],
[1, 0, 1, 0],
[0, 0, 0, 0],
[1, 0, 1, 0]], columns=["y", "age_catg", "race_catg", "sex_catg"])
我想使用 pd.crosstab()
函数创建 y 与 age_catg、race_catg、sex_catg 的双向表,以便检查预测变量类别之间的 y 值完全分离。
我的实际数据框包含数千个预测变量,因此与其明确命名年龄、种族和性别预测变量,我更愿意使用列 #'s。但是,我仍然对 Python 中的行和列引用感到困惑 - 例如以下代码不起作用:
desc_tab = pd.crosstab(test_df[:,1], test_df[:,2:4])
desc_tab
要使用整数索引,您需要 iloc
方法:
pd.crosstab(test_df.iloc[:, 1], test_df.iloc[:, 2])
输出:
race_catg 0 1
age_catg
0 3 3
如果将多个 arrays/series 放在列表中,则可以将它们传递给列或行:
pd.crosstab(test_df.iloc[:, 1], [test_df.iloc[:, 2], test_df.iloc[:, 3]])
race_catg 0 1
sex_catg 0 1 0 1
age_catg
0 1 2 2 1
编辑
如果要按索引批量定义列(list是python中的保留字,请勿使用):
cols = [test_df.iloc[:, i] for i in [2, 3]]
pd.crosstab(test_df.iloc[:, 1], cols)
输出:
race_catg 0 1
sex_catg 0 1 0 1
age_catg
0 1 2 2 1