IIUC:
df1 = df.assign(transamt = np.where(df['transcode'] == 'Debit',-1,1) * df['transamt'])
df1['balance1'] = (df1.balance
.fillna(df1.groupby('accntid', group_keys=False)
.apply(lambda x: x.balance.fillna(df1.transamt).cumsum())))
print(df1)
Выход:
accntid transcode transamt balance balance1
0 1 Credit 20 4000.0 4000.0
1 1 Debit -50 NaN 3950.0
2 1 Credit 80 NaN 4030.0
3 2 Debit -60 5000.0 5000.0
4 2 Credit 40 NaN 5040.0
5 2 Debit -120 NaN 4920.0
6 2 Credit 130 NaN 5050.0