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的每个组合。
提前致谢。
答案 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