[英]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.