Continually adding fields to a form each time a button is pressed using AJAX
Assuming all your logic for $form[‘column’][$i] is correct, you can try replacing '#attributes'

$form['column_wrapper'] = array(
        '#type'       =&gt; 'container',
        '#attributes' =&gt; array(
            'id'         =&gt; 'column_wrapper',
        ),
    );


With '#prefix' and '#suffix'

$form['column_wrapper'] = array(
        '#type'       =&gt; 'container',
        '#prefix' =&gt; '&lt;div id="column_wrapper"&gt;',
        '#suffix' =&gt; '&lt;/div&gt;',
    );


And then in the callback get the values from the complete form. 

public function addColumnCallback(array $form, FormStateInterface &amp;$form_state) {
    $form = $form_state-&gt;getCompleteForm();
    return $form['column'];
}


I had a similar problem, Ajax does rebuild the form, but using “old” values, so after the $form[‘column’][$i] is completed and calculated, Ajax then just overrides it with the previous $form[‘column’][$i]. 
If that makes sense.