代码之家  ›  专栏  ›  技术社区  ›  RobertF

初级Python问题:如何创建跨多个预测变量和结果变量的交叉表

  •  1
  • RobertF  · 技术社区  · 7 年前

    使用以下包含二进制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与年龄、种族、性别的双向表,以检查预测值类别之间y值的完全分离。

    我的实际数据框架包含几千个预测值,因此我宁愿使用#列,而不是显式地命名年龄、种族和性别预测值。但是,我仍然对row&感到困惑;Python中的列引用—例如,以下代码不起作用:

    desc_tab = pd.crosstab(test_df[:,1],  test_df[:,2:4])     
    desc_tab
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Edgar Ramírez Mondragón    7 年前

    要使用整数索引,需要 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
    

    如果要按索引批定义列( 列表

    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