在Pandas groupby对象中获取比率

姜饼

我有一个看起来像这样的数据框:

在此处输入图片说明

我想为每个状态创建另一列“ engaged_percent”,这基本上是唯一的engaged_count数除以每个特定状态的user_count数。

我尝试执行以下操作:

def f(x):
    engaged_percent = x['engaged_count'].nunique()/x['user_count']
    return pd.Series({'engaged_percent': engaged_percent})

by = df3.groupby(['user_state']).apply(f)
by

但这给了我以下结果:

在此处输入图片说明

我想要的是这样的:

user_state        engaged_percent
---------------------------------
California           2/21 = 0.09
Florida              2/7 =  0.28

我认为我的方法是正确的,但是我不确定为什么我的结果会像第二张图所示那样出现。

任何帮助将非常感激!提前致谢!

维克托·楚布科夫(Victor Chubukov)

怎么样:

user_count=df3.groupby('user_state')['user_count'].mean()
#(or however you think a value for each state should be calculated)

engaged_unique=df3.groupby('user_state')['engaged_count'].nunique()

engaged_pct=engaged_unique/user_count

(您也可以通过多种方式在一行中完成此操作)

您最初的解决方案几乎可以用,只是将值除以整个user count序列。因此,您获得的是系列而不是值。您可以尝试以下微小变化:

def f(x):
    engaged_percent = x['engaged_count'].nunique()/x['user_count'].mean()
    return engaged_percent

by = df3.groupby(['user_state']).apply(f)
by

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章