Оптимизация функции Pandas с помощью Numba - PullRequest
0 голосов
/ 29 марта 2020

Эта программа использует временные ряды в формате Matrix, один из столбцов матрицы - это Volume, программа затем уплотняет и расширяет строки, так что каждая строка в конечном итоге имеет одинаковый объем, сохраняя при этом временный порядок. Это сделано для того, чтобы события с малым объемом не добавляли гетероскедастичность в вычисления TS. Я пытался оптимизировать функцию pandas из-за высокого использования памяти и медлительности, я написал следующее и попытался вставить ее в Numba, но я не получаю никакого повышения производительности от numba jit. Мне было интересно, как мне лучше всего оптимизировать эту функцию, чтобы она работала быстро и не перегружала мой компьютер из-за нехватки памяти. Любая помощь будет принята с благодарностью.

@jit((float64[:], int64))
def create_new_df(df):
    ndf = (df.loc[df.index.repeat(df.Volume)]
                .assign(Volume=1,
                        groups=lambda x: np.arange(len(x))//750
                       )
                .groupby('groups')
                .agg({'Timestamp':'first',
                      'Volume':'sum',
                      'C':'mean',
                      'D':'mean',
                      'E':'mean',
                      'F':'mean',
                      'G':'mean'}))

Для len (x) // 750 это (сокращенно для краткости):

Timestamp Volume C          D           E           F         G

23:32:03   1    57.05      57.05       57.05       57.05     57.05

23:32:04   0    57.05      57.05       57.05       57.05     57.05

...

23:32:55   0    57.05      57.05       57.05       57.05     57.05

23:32:56   2    57.04      57.04       57.04       57.04     57.04

23:32:57   0    57.04      57.04       57.04       57.04     57.04

23:32:58   0    57.04      57.04       57.04       57.04     57.04

Становится так (также сокращенно для краткости):

Timestamp Volume    C           D           E           F       G

23:32:03  750   57.10   57.10   57.10   57.10   57.10

09:05:14  750   57.07   57.07   57.07   57.07   57.07

11:26:11  750   57.14   57.14   57.14   57.14   57.14

13:40:21  750   57.12   57.12   57.12   57.12   57.12

00:18:15  750   57.44   57.45   57.44   57.45   57.45

...