В моей панели panda у меня есть две колонки: "id" и "amount". Для одного и того же идентификатора существует несколько транзакций. В "сумме" -column могут быть положительные и отрицательные значения. Теперь я хочу сгруппировать все id, где сумма отрицательная, и подсчитать их. Как я могу это достичь?
Создайте булевскую маску с помощью сравнения lt
(<
) и суммарной sum
True
значениями являются процессы, такие как 1
с:
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