Мой код python долго запускается - PullRequest
0 голосов
/ 05 мая 2020

у меня большой набор данных, и я вычисляю ежедневно стандартное отклонение остатка для каждого идентификатора, код правильный, однако когда я компилирую код , он просто продолжает работать и работать.

Это мои данные

введите здесь описание изображения

это мой код:

первые две строки создают вывод repetitif для каждого идентификатора, который будет отображаться в моем фрейме данных, чтобы легко вычислить дисперсию и std по последним 3 кодам.

C['mean'] = C.apply(lambda x: C[(C.ID == x.ID)].residual.mean(), axis=1)
C['size']=C.apply(lambda x: C[(C.ID == x.ID)].residual.count(), axis=1)



C['diff2']=(C['residual']-C['Mean'])**2
C['var']=C['diff2']/(B['size']-1)
C['stddev'] = C['var']** 0.5

У меня вопрос, как повысить эффективность этого кода?

1 Ответ

0 голосов
/ 05 мая 2020

Проблема в том, что вы постоянно фильтруете DataFrame, ища все записи, идентификаторы которых совпадают с текущей строкой. Более того, вы делаете это дважды: один раз для среднего и один раз для размера.

Это ситуация, когда вы должны использовать groupby () для идентификатора и агрегировать остаток.

Если я понимаю, что вашей конечной целью является вычисление стандартного отклонения для каждого идентификатора, попробуйте что-то вроде этого:

import numpy as np
D = C.groupby("ID")["residual"].agg([np.mean, np.size, np.var, np.std]).reset_index()

D должен быть DataFrame с вычисленной статистикой (может потребоваться переименовать столбцы).

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