Как ускорить создание скользящей суммы (LTM) в пандах с большим набором данных? - PullRequest
0 голосов
/ 15 мая 2019

Я хочу рассчитать скользящую сумму (скользящий двенадцать месяцев) ежедневных продаж для набора данных с 400 тыс. Строк и 7 столбцами.Мой текущий подход работает, но довольно медленный (между 1-2 минутами).

Столбцы включают в себя: дату (ежедневные записи), страну, название товара (продукт), город клиента, номер клиента (ID) и имя клиента

Поскольку другие наборы данных, с которыми я работаю, намного больше (2+ миллиона строк и более) было бы замечательно, если у вас есть предложения о том, как ускорить текущий код:

import pandas as pd
import pyarrow.parquet as pq

# import dataset with 300k rows as pandas dataframe
df = pq.read_table('C:/test_cube_300k.parquet').to_pandas(strings_to_categorical=True)

# list for following groupby
list_groupby = [
    "country",
    "item_name",
    "customer_city",
    "customer_number",
    "customer_name"
    ]

# aggregate daily values to monthly view and resample to add months if months are missing (e.g. January and March with entries but February is missing
df_ltm = df.set_index('date').groupby(list_groupby)["sales"].resample("M").sum()

df_ltm = df_ltm.reset_index()
df_ltm = df_ltm.set_index('date')
df_ltm.sort_index(inplace=True)

# rolling twelve months sum accounting for all specifications/columns via groupby, window = 12 months, frequency = months, min_periods = 12
df_ltm = df_ltm.groupby(list_groupby)['sales'].rolling(window=12, freq='M', min_periods=12).sum().fillna(0)

df_ltm = df_ltm.reset_index().sort_index()
...