Сначала создайте вспомогательный столбец A
с assign
, а затем агрегируйте по agg
функциям sum
только для подсчета OK
значений и size
для подсчета всех значений в группах:
df = (df.assign(A=(df['status']== 'OK'))
.groupby(['column1', 'column2', 'column3'])['A']
.agg([('qtd_ok','sum'),('qtd','size')])
.astype(int)
.reset_index())
Образец :
df = pd.DataFrame({
'column1':['a'] * 9,
'column2':['a'] * 4 + ['b'] * 5,
'column3':list('aaabaabbb'),
'status':list('aabaaabba'),
})
print (df)
column1 column2 column3 status
0 a a a a
1 a a a a
2 a a a b
3 a a b a
4 a b a a
5 a b a a
6 a b b b
7 a b b b
8 a b b a
df = (df.assign(A=(df['status']== 'a'))
.groupby(['column1', 'column2', 'column3'])['A']
.agg([('qtd_ok','sum'),('qtd','size')])
.astype(int)
.reset_index())
print (df)
column1 column2 column3 qtd_ok qtd
0 a a a 2 3
1 a a b 1 1
2 a b a 2 2
3 a b b 1 3