繁体   English   中英

python pandas groupby然后计算满足条件的行

[英]python pandas groupby then count rows satisfying condition

我正在尝试对id column进行分组,以便我可以显示 col1 中等于 1 的行数。

df:

id col1 col2 col3
a   1     1    1
a   0     1    1
a   1     1    1
b   1     0    1

我的代码:

df.groupby(['id'])[col1].count()[1]

我得到的输出是 2。它没有向我显示其他ids的值,比如 b。

我想要:

id col1
a   2    
b   1 

如果可能的话,每个 id 的总行数也可以显示为新列吗?

例子:

id col1 total
a   2    3
b   1    1

假设 col1 中只有 1 和 0,则可以使用agg

df.groupby('id', as_index=False)['col1'].agg({'col1': 'sum', 'total': 'count'})

#  id   total   col1
#0  a       3      2
#1  b       1      1

这是因为您的 id 为 'a' 的行总和为 3。其中 2 个是相同的,这就是为什么它被分组并被视为一个的原因,然后它添加了包含 0 值的唯一行 1。你不能分组行上具有不同值的行。

是的,您可以将其添加到您的输出中。 只需在代码的列部分放置一个如何计算所有行的方法。

如果您想推广解决方案以包含 col1 中不为零的值,您可以执行以下操作。 这也正确地对列进行了排序。

df.set_index('id')['col1'].eq(1).groupby(level=0).agg([('col1', 'sum'), ('total', 'count')]).reset_index()

  id  col1  total
0  a   2.0      3
1  b   1.0      1

agg方法中使用元组,其中第一个值是列名,第二个值是聚合函数对我来说是新的。 我只是在试验,它似乎奏效了。 我不记得在文档中看到过它,所以请谨慎使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM