我有以下数据:
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
有人可以帮我吗?
答案 0 :(得分:2)
将列与1
比较并汇总mean
,True
的过程类似于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
列中只有0
和form
值:
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