在熊猫中具有分类值的多个列之间的交叉表

时间:2019-05-09 18:57:07

标签: python pandas multiple-columns crosstab

我有一个数据集,上面有关于属于单个类别的多个条件的信息(例如:ADHD活跃类型的个体将被视为患有ADHD)。我需要确定有多少个人至少具有该类别中的一个条件,这样我才能进行全局计数而无需对个人进行两次计数。

这是我的数据的样子:

IID SEX ADHDh ADHDi ADHDc... Ind1 M Present Absent Absent

因此,我需要执行交叉表,因为否则我将增加实际计数。问题是我的行值是类别变量:“当前”,“不存在”和“ Unable_to_code”。但是,我只想对具有属于一个类别的条件的多个列中的值为“ Present”的人数进行计数。我已经用几种方法来解决这个问题,但是我总是遇到同样的问题:我得到了一个凌乱的表,该表试图为每一列计算所有不同的分类值。我需要获得一个列联表,该表仅按性别分类该类别中至少具有一个条件(ADHD_NOS,ADHDh,ADHDi或ADHDc的“存在”)的人数。最终目标是做一个方测试,比较男性和女性。

我正在寻找的是: `

 SEX      ADHD              
   F        57
   M       113

这是我在熊猫中使用的未按性别分组的代码:

ct_adhd=pd.crosstab([df_trans.ADHD_NOS=="Present", df_trans.ADHDi=="Present", df_trans.ADHDh=="Present"], df_trans.ADHDc=="Present", margins=True) ct_adhd

这是我得到的凌乱桌子:

ADHD_NOS False True All ADHDc ADHDi ADHDh
False False False 10 5 25 True 5 0 2 True False 5 0 3 True False False 20 0 30 True False 1 0 1 All 41 5 107

我还尝试使用此代码对所有列中仅具有值“ Present”的个人求和,但是该代码自动假定no-data = 0,因此它不提供有关实际拥有多少个人的信息数据:

df_trans['Count_ADHD'] = (df_trans[["ADHDc","ADHDh","ADHDi"]] == 'Present').sum(axis=1)

P.S。我更喜欢与Pandas合作,但是如果在R中做得更好,我会尝试的。我将不胜感激任何帮助!

0 个答案:

没有答案