Pandas计算groupby的条件计数,包括零计数

时间:2016-07-09 17:47:00

标签: python pandas

Pandas有没有办法根据包含那些不包含值的组来计算包含特定值的行数?

例如,如果我有这个数据帧:

dd = pd.DataFrame({'g1':['a','b','a','b','a','b','c','c'],\
'g2':['x','x','z','y','y','z','x','z'],\
'cond':['i','i','i','j','j','j','k','k']})
dd[['g1','g2','cond']]

    g1  g2  cond
0   a   x   i
1   b   x   i
2   a   z   i
3   b   y   j
4   a   y   j
5   b   z   j
6   c   x   k
7   c   z   k

我想按组获取j的所有计数,包括该组是否没有包含'j'的任何行。理想的输出看起来像这样:

a   x     0
    y     1
    z     0
b   x     0
    y     1
    z     1
c   x     0
    z     0

如果我事先尝试取条件切片,我会得到一个我不想要的截断答案。

dd.ix[dd['cond']=='j',:].groupby(['g1','g2'])['cond'].count()
g1  g2
a   y     1
b   y     1
    z     1

此外,我不想要数据透视表,因为数据框不包含g1和g2的每个组合。

提前致谢。

1 个答案:

答案 0 :(得分:4)

只需apply一个计算js的函数。

>>> dd.groupby(['g1', 'g2']).cond.apply(lambda g: (g=='j').sum())
g1  g2
a   x     0
    y     1
    z     0
b   x     0
    y     1
    z     1
c   x     0
    z     0
Name: cond, dtype: int64
相关问题