使用以下包含二进制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
答案 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