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

如何基于pd.DataFrame为曲线局部数据拟合直线

局部区间直线拟合方案(适配多数据集批量处理)

你目前已为SED数据拟合了三阶多项式曲线,现在需要对曲线中9.5 < x < 15的下降区间单独拟合直线,同时希望避免手动切片DataFrame以适配多组数据集的批量处理,以下是可行方案:

核心思路

通过布尔掩码直接在拟合函数中筛选目标区间的数据,无需提前生成切片后的DataFrame,既简化代码又方便批量复用逻辑。

方法1:直接在拟合时筛选数据

直接给poly.polyfit传入区间掩码筛选后的x、y数据,不用单独创建切片变量:

# 假设x、y是从DataFrame中提取的数组或Series
mask = (x > 9.5) & (x < 15)
# 拟合一阶多项式(直线)
line_coefs = poly.polyfit(x[mask], y[mask], 1)
# 生成区间内的拟合序列用于绘图
x_line = np.linspace(9.5, 15, num=100)
line_fit = poly.Polynomial(line_coefs)

如果直接操作DataFrame的列:

# xvar、yvar是DataFrame中x、y对应的列名
mask = (pks[xvar] > 9.5) & (pks[xvar] < 15)
line_coefs = poly.polyfit(pks[xvar][mask], pks[yvar][mask], 1)

方法2:封装函数实现批量处理

把拟合逻辑封装成函数,传入数据集、列名和区间参数,即可一键处理多组数据:

import numpy as np
from numpy import poly

def fit_local_line(df, x_col, y_col, x_low, x_high):
    # 生成目标区间掩码
    mask = (df[x_col] > x_low) & (df[x_col] < x_high)
    # 拟合直线
    coefs = poly.polyfit(df[x_col][mask], df[y_col][mask], 1)
    # 生成拟合用的x序列和对应拟合值
    x_fit = np.linspace(x_low, x_high, num=100)
    y_fit = poly.Polynomial(coefs)(x_fit)
    return coefs, x_fit, y_fit

# 处理单组数据示例
coefs, x_line, y_line = fit_local_line(pks, xvar, yvar, 9.5, 15)

# 批量处理多组数据集示例(dataset_list为包含多个DataFrame的列表)
dataset_list = [df1, df2, df3]
fit_results = []
for df in dataset_list:
    res = fit_local_line(df, xvar, yvar, 9.5, 15)
    fit_results.append(res)

补充提示

  • 若每组数据的目标区间不固定,可在函数中加入区间自动识别逻辑(比如通过曲线斜率判断下降段),进一步提升批量处理的自动化程度。
  • 布尔掩码的方式本质是筛选数据,但无需额外创建切片后的DataFrame,代码更紧凑且易于维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:31:06