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

使用Pandas在列间对任意值进行线性插值计算

问题

我有一组包含DaysFrom列的记录,同时还有对应标准天数(90、180、360)的数值列,原始数据如下:

Date      DaysFrom  90    180   360
2023-11-04   135         4       5       12
2023-11-05   360         3       5       20
2023-11-06   270         5       7       15
2023-11-07   180         6       3       10

需要根据DaysFrom的值计算线性插值得到IntVal列,期望结果如下:

Date      DaysFrom  90    180   360   IntVal
2023-11-04   135         4       5       12      4.5
2023-11-05   360         3       5       20      20
2023-11-06   270         5       7       15      11
2023-11-07   180         6       3       10      3

注:示例中DaysFrom值为标准天数或中间值,实际数据中DaysFrom可为90到360之间的任意值。

解决方案

可以通过条件判断结合线性插值公式实现,以下以SQL为例:

SELECT
    Date,
    DaysFrom,
    "90",
    "180",
    "360",
    CASE
        -- 匹配标准天数时直接取对应列值
        WHEN DaysFrom = 90 THEN "90"
        WHEN DaysFrom = 180 THEN "180"
        WHEN DaysFrom = 360 THEN "360"
        -- 90-180区间插值计算
        WHEN DaysFrom BETWEEN 90 AND 180 THEN 
            "90" + ("180" - "90") * (DaysFrom - 90) / (180 - 90)
        -- 180-360区间插值计算
        WHEN DaysFrom BETWEEN 180 AND 360 THEN 
            "180" + ("360" - "180") * (DaysFrom - 180) / (360 - 180)
    END AS IntVal
FROM your_table_name;

插值逻辑说明

线性插值核心是基于区间内的比例计算:

  • 若当前DaysFrom值为x,落在区间[x_low, x_high],对应区间的数值为y_low和y_high
  • 插值结果 = y_low + (y_high - y_low) * (x - x_low)/(x_high - x_low)

比如示例中2023-11-04的DaysFrom=135,落在90和180之间:
4 + (5-4)*(135-90)/(180-90) = 4 + 1*45/90 = 4.5,与期望结果一致;
2023-11-06的DaysFrom=270,落在180和360之间:
7 + (15-7)*(270-180)/(360-180) =7 +8*90/180=7+4=11,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:13:29