繁体   English   中英

如何为唯一 ID 运行多个线性模型,并通过唯一 ID 将结果放入单个 dataframe 中?

[英]How do I run multiple linear models for unique IDs and put the results in a single dataframe by the unique IDs?

如何将 dataframe 中唯一 ID 的回归截距和系数数据获取到单个 dataframe 中,其中每行都有 UID、截距和系数?

这是我的原始数据的一个片段。 未来的数据可以有更多的 UID 和更多的字段(自变量)。

用户标识符 A1 A2 A3 A4 评分
1 0.377489423 0.950311846 0.892135293 0.077054085 4
1 0.595570737 0.824334482 0.388634543 0.947936483 4
1 0.585703124 0.825486315 0.569809886 0.321117521 3
1 0.386968371 0.594556911 0.260187376 0.394238102 4
1 0.532731866 0.219741858 0.865710517 0.173044631 3
1 0.16565561 0.125096015 0.881841651 0.494690133 4
2 0.42418965 0.814894214 0.989426645 0.871014023 1
2 0.742604257 0.571780036 0.247811255 0.468820653 2
2 0.401989919 0.375134173 0.539599593 0.443260146 3
2 0.167910365 0.940073739 0.490081723 0.803074574 5
2 0.614160221 0.045817359 0.077645469 0.367456074 4
3 0.866397055 0.2932472 0.968410252 0.348542304 5
3 0.141680391 0.998446121 0.201506356 0.689863785 1
3 0.407182414 0.721650663 0.174277013 0.922810374 1

这是我编写的代码,用于遍历每个唯一的 UID 并运行线性 model 并将每个 UID 的截距和系数添加到列表中。

ids = df.UID.unique()

op=[]
for i in ids:
    df_i = df[df.UID == i]
    X =df_i.drop(['UID','Rating'], axis=1)
    y= df_i['Rating']
    reg = LinearRegression().fit(X, y)
    reg.score(X, y)
    const = reg.intercept_
    coef = reg.coef_
    op.append(const)
    op.append(coef)
op

我希望我的 output 看起来像这种格式(显示的数据是虚拟数据)。 所以每一行都有 UID、截距和线性回归系数。 这就是我卡住的地方。

用户标识符 截距 A1 A2 A3 A4
1 3.2343 0.950311846 0.892135293 0.077054085 4.3454
2 2.123 0.824334482 0.388634543 0.947936483 2.3454
3 3.455 0.825486315 0.569809886 0.321117521 3.12343

也可以随意评论获取回归模型的初始方法。

谢谢

请参阅以下更改:

ids = df.UID.unique()

op=pd.DataFrame()

for i in ids:
    
    df_i = df[df.UID == i]
    X =df_i.drop(['UID','Rating'], axis=1)
    y= df_i['Rating']
    reg = LinearRegression().fit(X, y)
    reg.score(X, y)
    const = reg.intercept_
    coef = reg.coef_
    uid=i
    array=np.append(coef,const)
    array=np.append(array,uid)
    array=array.reshape(1,len(array))
    df_append=pd.DataFrame(array)
    op=op.append(df_append)

op.columns=['A'+str(i) for i in range (1,len(op.columns)+1)]
op.rename(columns={op.columns[-1]:"UID"},inplace=True)
op.rename(columns={op.columns[-2]:"Intercept"},inplace=True)
op=op.reset_index().drop('index',axis=1)
op=op.drop_duplicates()

这是我想出的/。 我只需要添加 UID,不知道如何为每一行添加它。

ids = df.UID.unique()

op = pd.DataFrame
intercept = []
coefficients=[]
UID = []
for i in ids:
    df_i = df[df.UID == i]
    X =df_i.drop(['UID','Rating'], axis=1)
    y= df_i['Rating']
    reg = LinearRegression().fit(X, y)
    reg.score(X, y)
    unique_id=df_i['UID'].unique()   
    const = reg.intercept_
    coef = reg.coef_
    UID.append(unique_id)
    intercept.append(const)
    coefficients.append(coef)

intercep_new = pd.DataFrame(intercept)
coefficients_new = pd.DataFrame(coefficients)
UID_new = pd.DataFrame(UID)

colNames = df.drop(['Rating',], axis=1).columns
colNames = colNames.insert(1, 'Const')
colNames

op = pd.concat([UID_new,intercep_new, coefficients_new], axis=1)
op.columns = colNames

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM