Эта программа использует временные ряды в формате 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