我有一个数据框,如下所示:
id salary days_employed category salary_percentile
1 200000 400 1 14
其中类别0表示该人是早期戒烟者,类别1表示该人待了更长的时间。
我的代码如下:
df1['salary_percentile'] = pd.qcut(df1['salary'], 50, labels=['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50'])
切入intp 50个存储桶并检查行数是否位于第37个salal_percentile之后,这就是我的数据框的外观:[![在此处输入图片描述] [2]] [2]
def f(x):
early_quitter = x.loc[(x.category== '0')]
non = x.loc[(x.category == '1')]
proportion_early_quitters = early_quitter.shape[0]/x.shape[0]
return pd.Series({'prop_early_quitters': proportion_early_quitters})
bypercentile = df1.groupby('salary_percentile').apply(f)
bypercentile = bypercentile.reset_index(level='None')
bypercentile
我希望函数返回一个数据框,该数据框包含每个组中Early_quitters的比例。即在每个组中,我想计算(len(early_quitter)/ len(group))。当我使用此函数时,它将为每个组返回一个比例为0的数据框。
有人可以帮我弄这个吗?
附带说明一下,我使用上面显示的代码创建了salary_percentile列。
谢谢!
首先,得到零的原因是因为len
返回一个整数,并且在python 2中执行整数除以整数时,会得到一个整数,该整数的值是除法的结果,十进制分量被截断了。因此,“一些小于n的正数” / n等于零。您可以使用以下方法解决此问题float(len(early_quitter)) / len(group)
但是,如果将早期戒烟者标记为0,否则将其标记为1,则早期戒烟者的比例为
float(len(early_quitters)) / len(group)
或者
1 - float(len(not_early_quitters)) / len(group)
或者因为这些值是1,所以len
产生的值与sum
1 - sum(not_early_quitters) / len(group)
但是,这就是...not_early_quitters
内均值的定义。group
1 - mean(early_quitters)
您应该能够从定义的变量中获得此信息
1 - df1.groupby('salary_percentile').category.mean()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句