There are two approaches to balance calculation like this: 1) on-the-fly, or 2) maintaining the values separately in the database. It sounds like you're trying to build these values on-the-fly (every time the View is rendered, they are recalculated dynamically). This is the simpler approach of the two, but you may run into performance issues if you are trying to render a large amount of results. Approach #2 is essentially a form of caching for the balance - and thus comes with all the complexity of caching (ie: invalidating certain values if one in the past is changed, etc).
Assuming you want to stick with approach #1, there are two sub-approaches - aka two possible places to do the balance calculation: 1a) in the SQL query, or 1b) in PHP.
1a: It's possible to build these "balance" fields in the SQL query itself using a sub-query field that adds up all the payments up to the date of the current payment. In order to achieve this in Views, you would need to create a custom Views field handler that adds the subquery field.
1b: Using PHP and one of the hook_X_alter() functions that Views provides, it's possible to alter the values of fields AFTER the database query runs, and BEFORE it gets rendered on the page. This previous answer might help: How to alter single custom field value in views?