如何用回归模型预测值替换DataFrame中pkg_yld等列的NaN值
解决方案
- 前提假设:你的DataFrame包含
month日期列(格式为datetime64),已完成2020.7-2021.6区间的OLS模型拟合
步骤1:筛选2021年7-12月的待填充行
首先构造行筛选掩码:
import pandas as pd # 构造2021年7-12月的行筛选条件 fill_mask = (df['month'] >= '2021-07-01') & (df['month'] <= '2021-12-31')
步骤2:填充pkg_yld列的NaN值
两种方式二选一即可:
方式1:直接用已拟合的OLS模型预测(精度更高,避免手动抄系数误差)
# 给待预测的adv列添加常数项,匹配模型输入格式 X_pred = sm.add_constant(df.loc[fill_mask, 'adv']) # 预测值直接覆盖对应行的NaN df.loc[fill_mask, 'pkg_yld'] = model.predict(X_pred)
方式2:用你已得到的回归公式直接计算
df.loc[fill_mask, 'pkg_yld'] = 93.3 - 0.68 * df.loc[fill_mask, 'adv']
步骤3:计算并填充yoy_pkg_yld列的NaN值
通过偏移12个月匹配去年同期的pkg_yld值计算同比:
# 构造辅助列:当前行对应去年同期的月份 df['last_year_month'] = df['month'] - pd.DateOffset(years=1) # 构造月份到pkg_yld的映射字典,用来匹配去年同期值 month_pkg_map = df.set_index('month')['pkg_yld'].to_dict() # 匹配去年同期值后计算同比 df.loc[fill_mask, 'yoy_pkg_yld'] = ( df.loc[fill_mask, 'pkg_yld'] / df.loc[fill_mask, 'last_year_month'].map(month_pkg_map) - 1 ) * 100 # 删除不需要的辅助列 df.drop(columns='last_year_month', inplace=True)
- 验证:以你给出的2021年7月数据为例,adv=9.0、去年同期pkg_yld=97.5,计算得到的结果和你示例的
-10.6%完全一致。
内容的提问来源于stack exchange,提问作者jack homareau
相关产品推荐
相关产品推荐

