как ускорить формирование нового столбца по нескольким правилам - PullRequest
0 голосов
/ 17 сентября 2018

Я собираюсь измерить ситуацию с продажами автомобилей за последние несколько месяцев,

Мне нужно вычислить среднее значение и сумму за последние 6 и 12 месяцев,

То, как я делаю это в pythonв следующих кодах.

Проблема в том, что обработка данных занимает относительно много времени, когда данные относительно велики, а когда данные маленькие, они работают просто отлично.

Есть ли гениальный способ ускорить его?

def ts(x,y):

    d[x+'sum12']=0
    d[x+'sum6']=0
    d[x+'year_flag']=0
    d[x+'sum_last12']=0
    d[x+'sum_last6']=0

    for i in range(0,len(d)):
        d.iloc[i][x+'sum6']=d.loc[(d.iloc[i]['PERIOD_ID']>=d['PERIOD_ID'])&\
                             (d['PERIOD_ID']>=d.iloc[i]['last6'])\
                             &(d.iloc[i]['RTL_DLR_ID']==d['RTL_DLR_ID'])]    [y].sum()
        d.iloc[i][x+'sum12']=d.loc[(d.iloc[i]['PERIOD_ID']>=d['PERIOD_ID'])&\
                             (d['PERIOD_ID']>=d.iloc[i]['last12'])\
                             &(d.iloc[i]['RTL_DLR_ID']==d['RTL_DLR_ID'])][y].sum()
        d.iloc[i][x+'sum_last6']=d.loc[(d['PERIOD_ID']>=(d.iloc[i]['last6']-100))&\
                             (d.iloc[i]['last12']>=d['PERIOD_ID'])\
                             &(d.iloc[i]['RTL_DLR_ID']==d['RTL_DLR_ID'])][y].sum()

        d.iloc[i][x+'sum_last12']=d.loc[(d['PERIOD_ID']>=(d.iloc[i]['PERIOD_ID']-100))&\
                             (d.iloc[i]['last12']>=d['PERIOD_ID'])\
                             &(d.iloc[i]['RTL_DLR_ID']==d['RTL_DLR_ID'])][y].sum()`enter code here`
        d.iloc[i][x+'year_flag']=d.iloc[i]['MTD_SAL_VOL_MKR_NUM']-d.loc[(d.iloc[i]['last12']==d['PERIOD_ID'])&\
                                                     (d.iloc[i]['RTL_DLR_ID']==d['RTL_DLR_ID'])][y].sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...