Вы можете groupby
, используя логическое маскирование
mask = (df.TYPE=='Digital').map({False: 'Remainder', True:'Digital'})
или, используя np.where
(что IMO является более элегантным решением)
mask = np.where(df.TYPE=='Digital', 'Remainder', 'Digital')
Оба приведут к
df.groupby(mask)['USD'] \
.agg(['sum', 'count']) \
.reset_index() \
.rename(columns={'sum': 'TOTAL', 'count': 'COUNT'})
TYPE TOTAL COUNT
0 Digital 17.0 2
1 Remainder 37.0 4
Для более чем двух групп вы можете использовать np.select
как mask
np.select([df.TYPE == 'Digital', (df.TYPE == 'Paper') | (df.TYPE=='Note'), df.TYPE=='Mail'],
['Digital', 'Paper', 'Remainder']