Оптимизировать код Python для преобразования переменных - PullRequest
0 голосов
/ 05 октября 2018

Я выполняю следующую операцию для отсортированного набора данных 'df_post_decay', содержащего набор данных временных рядов для нескольких идентификаторов, и я хочу преобразовать мои переменные 'demean_variables' для каждого идентификатора.

Созданная переменная для преобразованной тактической переменной ''dm_'+var' для идентификатора (i) и времени (t1) будет иметь вид:

{(тактика) - (среднее значение (тактика) для всех строк идентификатора (i)) - (среднее значение (тактика) для всех рядов времени (t1)) + (общее среднее значение (тактика) по всему столбцу тактики)}

time_col = 'mnth'
demean_variables =['overall_details','speaker_total','overall_samples_eu','copay_redemption_count','voucher_redemption_count','dtc']
df_post_demean['key'] = 1

for var in demean_variables:

    df_post_demean['dm_'+var] = df_post_demean[var] - df_post_demean.groupby(id_col)[var].transform(np.mean) - df_post_demean.groupby(time_col)[var].transform(np.mean) + df_post_demean.groupby('key')[var].transform(np.mean)


del df_post_demean[var]
print(sum(df_post_demean['dm_'+var]))

del df_post_demean['key']

Я хочу оптимизировать этот раздел кода, как он естьзаняв более 10 минут для 5 миллионов + строк в моем наборе данных.

Пожалуйста, найдите образец набора данных 'df_post_decay'

ID  mnth    overall_details speaker_total   overall_samples_eu  copay_redemption_count  voucher_redemption_count    dtc
1   201701  3   1   10  9   3   6
1   201702  6   1   0   7   7   10
1   201703  10  8   7   8   9   10
1   201704  3   9   3   0   1   1
1   201705  9   0   8   9   6   4
1   201706  8   3   2   10  8   9
1   201707  3   10  3   0   5   6
1   201708  2   10  3   9   6   2
1   201709  1   3   7   10  8   0
1   201710  3   8   2   8   0   10
1   201711  6   7   4   8   5   6
1   201712  3   8   2   9   4   10
2   201701  7   4   7   4   10  2
2   201702  10  0   2   2   10  5
2   201703  10  6   4   10  5   3
2   201704  4   3   6   4   0   8
2   201705  7   8   9   10  6   10
2   201706  8   0   2   7   1   8
2   201707  10  2   8   1   9   4
2   201708  10  6   7   0   3   5
2   201709  10  10  3   8   9   0
2   201710  2   0   3   5   5   8
2   201711  1   8   0   7   3   4
2   201712  8   5   1   0   7   9
3   201701  2   2   7   7   1   2
3   201702  2   8   10  9   6   9
3   201703  10  5   8   5   9   4
3   201704  6   1   2   4   6   2
3   201705  6   9   4   4   3   0
3   201706  5   1   6   4   1   7
3   201707  0   7   6   9   5   6
3   201708  10  3   2   0   4   5
3   201709  5   8   6   4   10  4
3   201710  8   3   10  6   7   0
3   201711  7   5   6   3   1   10
3   201712  3   9   8   4   10  0

1 Ответ

0 голосов
/ 08 октября 2018

Вы когда-нибудь смотрели на вещи BLAS / LAPACK?Эти библиотеки построены для линейных алгебраических операций в компиляторах.Попробуйте эти операции через BLAS / LAPACK.Чтобы установить его для Python, взгляните на следующее:

Вы можете проверить здесь Почему BLAS имеет значение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...