I think you want to have independent randomisation of your rows (using the loop randomisation) and the chosen column.
You could look at my independent randomisation demo, but the principle would be to have a shuffled array containing 1 to 4 5 times and then some code to select the column based on the value popped from that array.
Begin Experiment
conditions = [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]
shuffle(conditions)
Begin Routine
condition = conditions.pop()
if condition == 1:
thisText = shame_condition
thisExp.addData('Condition','shame')
elif condition == 2:
....