Pandas如何获取列shift前最新值并放置在新增列首行
实现方法
你当前代码的问题有两点:
shift(1)会将Forecast列所有元素向下移动1行,原列最后一个值(也就是你需要的75000)会在移位后被丢弃,移位完成后再取值拿不到这个目标值df['Forecast'].tail(1)取到的是移位后列的最后一个值,且赋值时会自动对齐原索引,所以值会出现在最后一行而非首行
正确的实现需要在移位前先提取目标值,再完成列赋值,修改后的完整代码如下:
def show_data(): df = pd.DataFrame(myresult, columns=['Production', 'Forecast']) # 移位前提取Forecast列的最新(最后一行)值 latest_val = df['Forecast'].iloc[-1] # 执行移位操作 df['Forecast'] = df['Forecast'].shift(1) # 初始化新列,默认填充空值 df['Next Forecast'] = pd.NA # 给新列第一行赋值提前提取的最新值 df.iloc[0, df.columns.get_loc('Next Forecast')] = latest_val
代码说明
- 用
iloc[-1]在移位前提取原Forecast列最后一行的值,避免移位后值丢失 - 新列先全部设为空值,仅给第一行位置赋目标值,用
iloc定位第一行不受自定义索引影响,兼容性更好 - 执行后得到的效果和预期输出完全一致:首行
Next Forecast为75000,其余行均为空值
内容的提问来源于stack exchange,提问作者twyla
相关产品推荐
相关产品推荐

