Я работаю с набором данных 600.000 x 128, расположенным в следующей форме с иерархическим индексом (см. Слева):
Var1 Var2 ... Var1_mean Var2_mean ...
ID Date ID Date
1 2017-12 1 0.1 1 2017-12 2 0.3
1 2018-01 2 0.3 1 2018-01 2 0.3
1 2018-02 3 0.5 --> 1 2018-02 2 0.3
2 2018-01 2 0.2 2 2018-01 3 0.15
2 2018-02 4 0.1 2 2018-02 3 0.15
Теперь для всех 55.000 клиентов (= уникальные идентификаторы) я хочу заменитьзначения на клиента в выбранных переменных со средними значениями на клиента, сохраненные в новых переменных (имя переменной + «_mean», см. справа).
Я написал для этого функцию, но это занимает 4+ часа, даже после попытки распараллелить задачу.Я попытался:
identifiers = set(df_raw_sort.index.get_level_values(0)) # unique IDs
def avg_per_customer(column):
df_raw_sort.loc[:, column + '_mean'] = 0 # Create new col
for unique in identifiers:
meanvalue = np.mean(df_raw_sort[column].loc[(unique)])
df_raw_sort.loc[(unique), column + '_mean'] = meanvalue
Parallel(n_jobs=2, verbose=10)(delayed(avg_per_customer)(col) for col in transform)
# transforms selected columns (= transform)
Что я мог сделать, чтобы ускорить эту вещь?
Заранее большое спасибо.