Pandas groupby agg - 如何获取计数?

9

我想获取一个指标的总和、平均值和计数

df.groupby(['id', 'pushid']).agg({"sess_length": [ np.sum, np.mean, np.count]})

但是我得到了"module 'numpy' has no attribute 'count'"的错误,我已经尝试了不同的表达计数函数的方式,但是无法使其正常工作。我该如何将聚合记录计数与其他指标一起使用?

你只需要 len 吗?不确定你所说的表达计数函数的不同方式是什么意思 - 正如你所看到的,numpy 显然没有 np.count。这个函数预期要做什么? - Nathan
你可以使用 np.size - jxc
@jxc size 会将 nan 计算为一行,而 count 则会将 nan 排除在外。 - YJZ
4个回答

9
您可以使用字符串代替函数,像这样:

df = pd.DataFrame(
    {"id": list("ccdef"), "pushid": list("aabbc"), 
     "sess_length": [10, 20, 30, 40, 50]}
)

df.groupby(["id", "pushid"]).agg({"sess_length": ["sum", "mean", "count"]})

这将输出:

           sess_length
                   sum mean count
 id pushid
 c  a               30   15     2
 d  b               30   30     1
 e  b               40   40     1
 f  c               50   50     1

3

只需使用 np.size

不确定为什么答案需要是30个字符长,当答案很直接明了时。


我正好在找那个。np.count_nonzero看起来不太合适。 - Rafs

1
这可能有效:
df.groupby(['id', 'pushid']).agg({"sess_length": [ np.sum, np.mean, np.**size**]})

这种语法与去年被接受的答案中描述的['sum','mean','count']的使用相比,是否有优势?如果有的话,编辑您的答案以包含该信息将会很有用。 - Jeremy Caney

0

我想你的意思是:

df.groupby(['id', 'pushid']).agg({"sess_length": [ 'sum', 'count','mean']})

pandas文档中所述,您可以使用字符串参数,例如'sum'、'count'等来进行聚合操作。说实话,这是更可取的做法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接