Python 在数据帧向量化解决方案的子集上迭代拟合回归线?
我正在尝试聚合pandas DataFrame并创建两个新列,它们将是一个斜率和一个简单线性回归拟合的截距 虚拟数据集如下所示:Python 在数据帧向量化解决方案的子集上迭代拟合回归线?,python,pandas,vectorization,linear-regression,Python,Pandas,Vectorization,Linear Regression,我正在尝试聚合pandas DataFrame并创建两个新列,它们将是一个斜率和一个简单线性回归拟合的截距 虚拟数据集如下所示: CustomerID Month Value a 1 10 a 2 20 a 3 20 b 1 30 b 2 40 c 1 80 c
CustomerID Month Value
a 1 10
a 2 20
a 3 20
b 1 30
b 2 40
c 1 80
c 2 90
我希望输出像这样-值
与月份
对每个客户ID
进行回归:
CustomerID Slope Intercept
a 0.30 10
b 0.20 30
c 0.12 80
我知道我可以运行一个循环,然后针对每个customerID
运行线性回归模型,但我的数据集很大,我需要一种矢量化方法。我尝试通过传递线性回归函数来使用groupby
和apply
,但没有找到可行的解决方案
提前谢谢 通过将
scpiy
与groupby
一起使用,这里我使用for循环而不是apply,因为apply
比for循环慢
from scipy import stats
pd.DataFrame.from_dict({y:stats.linregress(x['Month'],x['Value'])[:2] for y, x in df.groupby('CustomerID')},'index').\
rename(columns={0:'Slope',1:'Intercept'})
Out[798]:
Slope Intercept
a 5.0 6.666667
b 10.0 20.000000
c 10.0 70.000000
通过将
scpiy
与groupby
一起使用,这里我使用for循环而不是apply,因为apply
比for循环慢
from scipy import stats
pd.DataFrame.from_dict({y:stats.linregress(x['Month'],x['Value'])[:2] for y, x in df.groupby('CustomerID')},'index').\
rename(columns={0:'Slope',1:'Intercept'})
Out[798]:
Slope Intercept
a 5.0 6.666667
b 10.0 20.000000
c 10.0 70.000000
我试着用。。。你的审判在哪里?有助于正在使用的模块。我们需要一个完整的代码块,包括import
行。没有找到有效的解决方案。。。你的错误或不期望的结果是什么?我尝试使用。。。你的审判在哪里?有助于正在使用的模块。我们需要一个完整的代码块,包括import
行。没有找到有效的解决方案。。。您的错误或意外结果是什么?