You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将groupby+sklearn线性回归的model.score结果保存为带分组名的DataFrame

问题:为每个分组生成线性回归R²分数并保存为DataFrame

我有一个包含99个分组的数据集,以下是3个分组的示例子集:

Name  conc  height
0  Oxaloacetate    20    9047
1  Oxaloacetate    50   24966
2  Oxaloacetate   100   47028
3   L-Glutamine    50  492567
4   L-Glutamine   100  553082
5   L-Glutamine    20  202931
6      L-Lysine    50  334892
7      L-Lysine   100  367027
8      L-Lysine    20  155603

我的目标是为每个分组单独计算线性回归的R²分数。我尝试用groupby和sklearn的LinearRegression实现,但只能打印出R²值,无法将结果整理成包含化合物名称和对应R²分数的DataFrame,期望格式如下:

Name  R2
0  Oxaloacetate    0.7663021592216027
1   L-Glutamine    0.7484017413491248
2      L-Lysine    0.9974783003289882

我现有代码如下:

import numpy as np
import matplotlib.pyplot as plt  # To visualize
import pandas as pd  # To read data
from sklearn.linear_model import LinearRegression

df = pd.read_csv ('name.csv')
def regress(df, X, y):
    model = LinearRegression()
    X = df.iloc[:, 1].values.reshape(-1, 1)
    y = df.iloc[:, 2].values.reshape(-1, 1)
    model.fit(X, y)
    r_squared = model.score(X, y)
    print(r_squared)
df.groupby('Name').apply(regress, y, X)

运行后仅输出R²数值:

0.7663021592216027
0.7484017413491248
0.9974783003289882

我无法将这些输出转换为目标格式的DataFrame,希望得到帮助。


解决方案

核心问题是现有函数只打印R²值,没有返回可被groupby.apply收集的结构化结果。修正步骤如下:

修正后的代码

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression

df = pd.read_csv('name.csv')

def regress(group):
    # 从当前分组提取特征和目标变量
    X = group['conc'].values.reshape(-1, 1)
    y = group['height'].values.reshape(-1, 1)
    # 训练线性回归模型并计算R²
    model = LinearRegression()
    model.fit(X, y)
    r_squared = model.score(X, y)
    # 返回包含R²值的Series,用于groupby自动合并
    return pd.Series({'R2': r_squared})

# 分组计算后重置索引,得到目标格式的DataFrame
r2_results = df.groupby('Name').apply(regress).reset_index()
print(r2_results)

关键说明

  • 移除原函数中冗余的X、y参数,直接从分组对象中提取指定列,逻辑更清晰
  • 函数返回pd.Series,groupby.apply会自动将每个分组的结果合并为以Name为索引的DataFrame
  • 调用reset_index()将Name从索引转为普通列,完全匹配你期望的输出格式

输出示例

Name        R2
0  Oxaloacetate  0.766302
1   L-Glutamine  0.748402
2      L-Lysine  0.997478

内容的提问来源于stack exchange,提问作者r brad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:22:25