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

时间:2017-01-17 02:05:13

标签: python pandas group-by

我正在尝试在a = zeros(1, 15); a(1) = 4.5; for k = 1:14 a(k + 1) = c * a(k); end last_a = a(end); 上执行groupby,以便我可以显示col1中等于1的行数。

DF:

id column

我的代码:

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

我得到的输出是2.它没有显示来自其他df.groupby(['id'])[col1].count()[1] 的值,如b。

我想:

ids

如果可能,每个ID的总行数也会显示为新列吗?

示例:

id col1
a   2    
b   1 

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这是因为您的行ID是' a'它们中的两个是相同的,这就是为什么它被分组并被视为一个然后它添加了在其第1列上包含0值的唯一行。你不能组行上具有不同值的行。

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

答案 2 :(得分:0)

如果要概括解决方案以在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方法中使用元组,其中第一个值是列名,第二个聚合函数对我来说是新的。我只是在试验它似乎工作。我不记得在文档中看到它所以请谨慎使用。