在python中虚拟后,在分类变量的每个级别中计算目标变量1的比例

时间:2018-07-10 10:01:28

标签: python pandas

我有以下数据:

disc_off_m4 form
NaN         1
NaN         1
Y           1
Y           1
NaN         0
N           1
N           1
NaN         0
N           0
Y           0
Y           1

其中form变量是目标变量。 我要在虚拟分类列disc_off_m4之后计算每个级别中1的比例。

编码生成数据:

import pandas as pd
df_prop = pd.DataFrame({'disc_off_m4':['NaN','NaN','Y','Y','NaN','N','N','NaN','N','Y','Y'],
                         'form' : [1,1,1,1,0,1,1,0,0,0,1]})

df_prop_cat = pd.get_dummies(df_prop.iloc[:,0])
frames = [df_prop_cat,df_prop['form']]
df_final = pd.concat(frames , axis = 1)

我想将每个级别的比例存储在数据帧中,并在虚拟变量上建立索引,如下所示:

variable            proportion
disc_off_m4_N       0.67
disc_off_m4_Y       0.75
disc_off_m4_nan     0.50

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

将列与1比较并汇总meanTrue的过程类似于1

a = df_prop['form'].eq(1).groupby(df_prop['disc_off_m4']).mean().reset_index()
print (a)
  disc_off_m4      form
0           N  0.666667
1         NaN  0.500000
2           Y  0.750000

详细信息

print (df_prop['form'].eq(1))
0      True
1      True
2      True
3      True
4     False
5      True
6      True
7     False
8     False
9     False
10     True
Name: form, dtype: bool

如果1列中只有0form值:

a = df_prop.groupby('disc_off_m4', as_index=False)['form'].mean()
print (a)
  disc_off_m4      form
0           N  0.666667
1         NaN  0.500000
2           Y  0.750000

答案 1 :(得分:1)

使用groupby和mean()。

import pandas as pd
df = pd.DataFrame({'disc_off_m4':['NaN','NaN','Y','Y','NaN','N','N','NaN','N','Y','Y'],
                         'form' : [1,1,1,1,0,1,1,0,0,0,1]})

df = df.groupby('disc_off_m4', as_index=True).mean()
df.index = df.index.name + '_' + df.index
print(df)

# Out put:
                     form
disc_off_m4_N    0.666667
disc_off_m4_NaN  0.500000
disc_off_m4_Y    0.750000