目前我的代码是这样设置的:

def lregression(data, X, y):
    X = df['sales'].values.reshape(-1, 1)
    y = df['target']
    model = LinearRegression()
    result = model.fit(X, y)
    return model.score(X, y)

然后,我试图针对每个品牌应用这个模型:

df.groupby('brand').apply(lregression, X, y)

但结果只是应用于完整的数据集:

Brand A    0.734
Brand B    0.734
Brand C    0.734

我是不是错过了什么? 我希望模型 for each 组单独运行,但显然我将模型应用于完整数据集,然后返回每个组的总得分. 谢谢!

推荐答案

DATAFRAME

拥有一个最小的可重复示例总是很好,我将在这里提供它:

np.random.seed(42)
data = {
    'brand': np.random.choice(['Brand A', 'Brand B', 'Brand C'], size=300),
    'sales': np.random.randint(100, 1000, size=300),
    'target': np.random.randint(100, 1000, size=300)
}

df = pd.DataFrame(data)

FUNCTION

对我来说,不清楚您是要返回单个回归的score(即R2)还是coef,在这两种情况下,函数只会略有变化:

评分

def lregression(group):
    X = group['sales'].values.reshape(-1, 1)
    y = group['target']
    model = LinearRegression()
    result = model.fit(X, y)
    return result.score(X, y)

系数

def lregression(group):
    X = group['sales'].values.reshape(-1, 1)
    y = group['target']
    model = LinearRegression()
    result = model.fit(X, y)
    return result.coef_

然后是最后一步(coef_个场景):

>>> df.groupby('brand').apply(lregression)
 
brand
Brand A     [0.20322970187699263]
Brand B     [0.09134770152569331]
Brand C    [0.043343302335992005]
dtype: object

其效果如预期

Python相关问答推荐

Django:如何将一个模型的唯一实例创建为另一个模型中的字段

带有Postgres的Flask-Data在调用少量API后崩溃

按日期和组增量计算总价值

Tkinter -控制调色板的位置

遵循轮廓中对象方向的计算线

如何根据条件在多指标框架上进行groupby

如何在Python中使用io.BytesIO写入现有缓冲区?

根据不同列的值在收件箱中移动数据

当多个值具有相同模式时返回空

如果值不存在,列表理解返回列表

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

在线条上绘制表面

改进大型数据集的框架性能

用砂箱开发Web统计分析

合并帧,但不按合并键排序

基于形状而非距离的两个numpy数组相似性

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题

Python—转换日期:价目表到新行

python—telegraph—bot send_voice发送空文件

OpenGL仅渲染第二个三角形,第一个三角形不可见