Pandas groupby применяет работу с образцами данных, но когда я использую полный набор данных, он не работает - PullRequest
0 голосов
/ 12 апреля 2020

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

df.loc[(df['SKU']>= 10001) &(df['SKU']<30000)].groupby(['SKU','LOCATION_GROUP'].apply(sku_predictions) 

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

def sku_predictions(df):
#lr_model = IsotonicRegression()
lr_model = LinearRegression()
predict = None
last_known_date = None
prediction_list = None
last_day_date = None
try:
    location = df['LOCATION_GROUP'].unique()[0]
    location_ats_qty = f"{location}_ATS_QTY"
    df['PREV_LOCATION_QTY'] =  df[location_ats_qty].shift(1)
    #if len(df['STORE_ATS_QTY'].unique()) >1:
     #   print("GREATER THan 1:")

    df = df.dropna()
    df['DAY_DATE'] = range(1, len(df)+1)
    lr_model.fit(df[['DAY_DATE', 'PREV_LOCATION_QTY']], df[location_ats_qty])
    #lr_model.fit(df['DAY_DATE'].values, df[location])
    try : 
         if lr_model.coef_[0] >=0 : 
                return pd.Series({'predict' : 0,'last_day_date' : 0,'prediction_list' : [], 'slope' :   lr_model.coef_[0], 'check' :0})
    except:
        return pd.Series({'predict' : 0,'last_day_date' : 0,'prediction_list' : [], 'slope' :  99, 'check' :0})
    predict = df[location_ats_qty].tail(1).values[0]
    last_known_date =df['DAY_DATE'].tail(1).values[0]
    prediction_list = []
    #print(lr_model.coef_[0])
   # if lr_model.coef_[0] < 0 : print(lr_model.coef_[0])

    last_day_date = last_known_date

    while(predict >1):
        last_day_date += 1
        predict = lr_model.predict([[last_day_date,predict]])
        prediction_list.append(predict)
        if last_day_date >50: break;
    prediction_list = [i[0] for i in prediction_list]
    #print(predict, last_day_date, prediction_list)
    return pd.Series({'predict' : predict[0],'last_day_date' :last_day_date-last_known_date ,
                                  'prediction_list' : prediction_list,  'slope' :   lr_model.coef_[0], 'check' :last_day_date})
except:
     return pd.Series({'predict' : 0 ,'last_day_date' : 0 ,'prediction_list' : [], 'slope' :   99, 'check' :0})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...