Python新手问题:如何在多个预测变量和结果变量之间创建交叉表

时间:2018-11-05 17:15:12

标签: python pandas crosstab

使用以下包含二进制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值是否完全分开。

我的实际数据框包含数千个预测变量,因此与其明确命名年龄,种族和性别预测变量,我不希望使用列号。但是,我仍然对Python中的行和列引用感到困惑-例如,以下代码不起作用:

desc_tab = pd.crosstab(test_df[:,1],  test_df[:,2:4])     
desc_tab

1 个答案:

答案 0 :(得分:2)

要使用整数索引,您需要使用iloc方法:

pd.crosstab(test_df.iloc[:, 1], test_df.iloc[:, 2])

输出:

race_catg  0  1
age_catg       
0          3  3

如果将它们放在列表中,则可以将多个数组/系列传递给列或行:

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

编辑

如果要按其索引批量定义列(列表是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