Единственная на текущий момент оптимизация, которая мне пришла на ум, это убрать операцию конкатенации и вместо ее создать массив типа:
array_data = []
'''
Тут находиться код программы
'''
array_data.append([row['odate'], tenor(row(ltt)), row['vdate'], bucket_class_old, buckclass(row['odues']), row['ball'], 0, ball_old, 0])
array_data.append([row['odate'], tenor(row(ltt)), row['vdate'], bucket_class_old, 100, difference, 0, ball_old, 0])
'''
Тут остальной код программы
'''
pandas.DataFrame(array_data)