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

Pandas基于avg列有效值区间线性公式新增fit列的代码问题求解

问题解决:pandas按区间线性填充fit列

原代码核心问题

  • NaN值判断逻辑错误:np.NaN == np.NaN永远返回False,必须使用pd.isna()或np.isnan()判断空值
  • 索引逻辑混淆:原代码混淆了自定义index列和DataFrame默认行索引,你预期的差值是当前行序号(0开始)和基准行序号的差,不是自定义index列的差值
  • 循环逻辑冗余:while循环完全没有必要,且容易触发死循环

正确可运行代码

import pandas as pd
import numpy as np

# 你的原始数据集
df = pd.DataFrame ({'index': [10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26], 
'avg': [130, np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN, 135, np.NaN, np.NaN,np.NaN,np.NaN,np.NaN, 136, np.NaN,np.NaN],
 'slope':[.02,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN, .08,np.NaN, np.NaN,np.NaN,np.NaN,np.NaN, .03, np.NaN,np.NaN] })

def calc_fit(df):
    base_row = None
    base_avg = None
    base_slope = None
    fit_res = []
    for row_idx in range(len(df)):
        current_avg = df.loc[row_idx, 'avg']
        # 遇到非空avg值更新基准参数
        if not pd.isna(current_avg):
            base_row = row_idx
            base_avg = current_avg
            base_slope = df.loc[row_idx, 'slope']
            fit_res.append(base_avg)
        # 空值用最近一次的基准参数线性计算
        else:
            fit_val = base_avg + base_slope * (row_idx - base_row)
            fit_res.append(fit_val)
    df['fit'] = fit_res
    return df

# 调用函数得到结果
df = calc_fit(df)

结果验证

运行后输出的df['fit']和你给出的预期完全一致:
[130.0, 130.02, 130.04, 130.06, 130.08, 130.1, 130.12, 130.14, 135.0, 135.08, 135.16, 135.24, 135.32, 135.4, 136.0, 136.03, 136.06]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:06:04