Есть пара вещей, которые вы можете сделать для улучшения параллелизма в этом примере:
Вы можете использовать dask.array.stats.skew вместо statsmodels.skew. Вам придется import dask.array.stats
явно
Вы можете вычислить мин / макс всех столбцов в одном вычислении
mins = [df[col].min() for col in cols]
maxes = [df[col].min() for col in cols]
skews = [da.stats.skew(df[col]) for col in cols]
mins, maxes, skews = dask.compute(mins, maxes, skews)
Тогда вы можете выполнить свою if-логику и применить da.log
в зависимости от ситуации. Это все еще требует двух проходов над вашими данными, но это должно быть хорошим улучшением по сравнению с тем, что у вас есть сейчас.