将函数应用于python熊猫中的groupby对象

姜饼

我有一个数据框,如下所示:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章