Просто сопоставьте ваш order_type со знаком, есть много способов сделать это, но на мой взгляд, проще всего было бы прочитать это:
df['sign'] = [1 if x == 'Buy' else -1 for x in df.order_type]
df['amount_adj'] = df.sign*df.amount
df.groupby(['client'])['amount_adj'].sum()
Выход:
client
Aaron 100
Jeff 200
John 0
Тот же результат при использовании однострочника и более быстрого np.where
:
df = df.assign(amount=np.where(df.order_type.eq('Sell'),
df.amount*-1, df.amount)).groupby(['client'])['amount'].sum()
выход:
client
Aaron 100
Jeff 200
John 0