Создание логической маски путем сравнения по lt
(<
) и агрегированным sum
- True
значениям процессов, подобных 1
s:
df = pd.DataFrame({
'id': ['a','a','a','a','b','b','b','c','c'],
'amount': [-4,-5,6,7,1,-2,3,4,8]
})
print (df)
id amount
0 a -4
1 a -5
2 a 6
3 a 7
4 b 1
5 b -2
6 b 3
7 c 4
8 c 8
df1 = df['amount'].lt(0).groupby(df['id']).sum().astype(int).reset_index(name='count')
Или создайте индекс по столбцу id
и используйте sum
только по level=0
(индекс):
df1 = df.set_index('id')['amount'].lt(0).sum(level=0).astype(int).reset_index(name='count')
print (df1)
id count
0 a 2
1 b 1
2 c 0