Передача фрейма данных в виде данных поезда и нескольких столбцов фрейма данных в качестве меток поезда в модель прогнозирования машинного обучения

У меня есть датафрейм вроде следующего:

BankNum | FirstName | LastName  | ID |

00987772  |  Michael  | Brown   | 123 |
00987772  |  Bob      | Brown   | 123 |
00987772  |  Michael  | Mooney  | 123 |
00987772  |  Raven    | Mallik  | 245 |
00982122  |  Karim    | Hareche | 564 |

Я делаю следующее, чтобы получить два словаря:

cols = [
    {'col': 'BankNum', 'func': lambda x: x.value_counts().to_dict()},
    {'col': 'FirstName', 'func': pd.Series.nunique},
    {'col': 'LastName', 'func': pd.Series.nunique}]

    d = df.groupby('Transporter ID').apply(lambda x: tuple(c['func'](x[c['col']]) for c in cols)).to_dict()            

    cols1 = ['ID']
    df2 = df.groupby('BankNum').apply(lambda x: tuple(x[c].nunique() for c in cols1))
    d1 = df2.to_dict()

где

d ={ 123 : ({00987772: 3}, 2,2), 245: ({00987772: 1}, 1,1), 564: ({00982122: 1}, 1,1)}

d1 = {00987772: (2,), 00982122:(1,)}

Далее я делаю следующее (ниже приведен только соответствующий код, есть и другие вещи, которые я делаю, которые я удалил из кода ниже:

   same_banknum={}
   l=[] 
    w=[]
    m = v[2].values()
    h2 = sum(i > 6 for i in m)
    mod2 = sum(i in [5,6] for i in m)
    l2 = sum(i in [3,4] for i in m)
    if h2 != 0:
        for k2, v2 in v[2].items():
            if v2 > 6:
                l.append(k2)
                w.append(v2)



    new_l=[]
    for i in l:
        v3 = d1.get(i) 
        new_l.append(v3[0])

    h3 = sum(i > 8 for i in new_l)
    m3 = sum(i in [5,6,7,8] for i in new_l)
    l3 = sum(i in [3,4] for i in new_l)
    c=[]
    if h3 != 0:
        for g in new_l:
            if g > 8:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("High", wt)
    elif m3 != 0:
        for g in new_l:
            if g in [5,6,7,8]:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("Moderate", wt)
    elif l3 != 0:
        for g in new_l:
            if g in [3,4]:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("Low", wt)
    else:
        same_banknum[k]= ("Low", 0.0)

elif mod2 != 0:
    for k2, v2 in v[2].items():
        if v2 in [5,6]:
            l.append(k2)
            w.append(v2)

    new_l=[]
    for i in l:
        v3 = d1.get(i) 
        new_l.append(v3[0])

    h3 = sum(i > 8 for i in new_l)
    m3 = sum(i in [5,6,7,8] for i in new_l)
    l3 = sum(i in [3,4] for i in new_l)
    c=[]
    if h3 != 0:
        for g in new_l:
            if g > 8:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("High", wt)
    elif m3 != 0:
        for g in new_l:
            if g in [5,6,7,8]:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("Moderate", wt)
    elif l3 != 0:
        for g in new_l:
            if g in [3,4]:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("Low", wt)
    else:
        same_banknum[k]= ("Low", 0.0)
elif l2 != 0:
    for k2, v2 in v[2].items():
        if v2 in [3,4]:
            l.append(k2)
            w.append(v2)

    new_l=[]
    for i in l:
        v3 = d1.get(i) 
        new_l.append(v3[0])

    h3 = sum(i > 8 for i in new_l)
    m3 = sum(i in [5,6,7,8] for i in new_l)
    l3 = sum(i in [3,4] for i in new_l)
    c=[]
    if h3 != 0:
        for g in new_l:
            if g > 8:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("High", wt)
    elif m3 != 0:
        for g in new_l:
            if g in [5,6,7,8]:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("Moderate", wt)
    elif l3 != 0:
        for g in new_l:
            if g in [3,4]:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("Low", wt)
    else:
        same_banknum[k]= ("Low", 0.0)
else:
    for k2, v2 in v[2].items():
        if v2 in [1,2]:
            l.append(k2)

    new_l=[]
    for i in l:
        v3 = d1.get(i) 
        new_l.append(v3[0])

    h3 = sum(i > 8 for i in new_l)
    m3 = sum(i in [5,6,7,8] for i in new_l)
    l3 = sum(i in [3,4] for i in new_l)
    c=[]
    if h3 != 0:
        for g in new_l:
            if g > 8:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("High", wt)
    elif m3 != 0:
        for g in new_l:
            if g in [5,6,7,8]:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("Moderate", wt)
    elif l3 != 0:
        for g in new_l:
            if g in [3,4]:
                c.append(g)
        wt = sum(c)
        same_banknum[k]= ("Low", wt)
    else:
        same_banknum[k]= ("Low", 0.0)

чтобы получить словарь, как это:

same_banknum = {123: ('Low', 0.6), 245: ('Low', 0.6), 564: ('Low', 0.0)}

Словарь same_banknum выполняет вышеуказанные вычисления и выясняет, совпадает ли BankNum существует для нескольких идентификаторов, а затем назначает их High, Low, Moderate значение вместе с весом, чтобы быть верным ему, чтобы дать нам словарь.

Который я могу преобразовать в фрейм данных, как показано ниже:

df1 = pd.DataFrame.from_dict(same_banknum, orient='index').reset_index()
df1.columns = ['ID','SameBankNum_Val','SameBankNum_Wt']

который дает:

ID   | SameBankNum_Val  | SameBankNum_Wt
123  |  Low             | 0.6
245  | Low              | 0.6
564  | Low              | 0.0

Что я хочу сделать, так это то, что вместо того, чтобы снова и снова выполнять это вычисление для каждого нового набора данных, я хочу использовать машинное обучение для построения прогностической модели, которая предсказывает вышеизложенное. SameBankNum_Val & SameBankNum_Wt для новых идентификаторов (тестовые данные).

Я мог бы добавить SameBankNum_Val & SameBankNum_Wt столбцы к указанному выше кадру. Но я хочу знать следующее: как передать несколько столбцов ( BankNum , FirstName , LastName , ID ) (из кадра данных 1 сверху) в качестве данных поезда и нескольких столбцов ( SameBankNum_Val , SameBankNum_Wt ) (из Dataframe 2 выше) как метка поезда в модели машинного обучения?

Кроме того, будет ли модель машинного обучения достаточно точной в отношении того, когда ее давать? High, Low или же Moderate стоимость и какой вес без выполнения этого длинного вычисления снова и снова? По этому вопросу, я думаю, мне нужно сначала протестировать несколько моделей.

Пожалуйста помоги! Спасибо!

0 ответов

Другие вопросы по тегам