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

Python pandas使用ffill结合减法填充Total列空值的实现方案

实现方案

错误原因

你之前的写法存在两个问题:

  • 语法错误:fillna的method参数仅支持传入指定填充规则的字符串,不能直接参与算术运算
  • 逻辑不符:ffill仅会原样复用前一行的有效值,无法自动结合当前行的Change值做差值计算

正确实现代码

核心思路是先定位最后一个有效的Total基准值,再对后续行的Change取反累加,叠加基准值即可得到所有缺失的Total值:

import pandas as pd
import numpy as np

# 构造测试数据
df = pd.DataFrame(
    data={'Change': [-12, -54, -23, -2, -54, -72],
          'Total': [100, 154, 177, np.nan, np.nan, np.nan]},
    index=['01/01/2021', '02/01/2021', '03/01/2021', '04/01/2021', '05/01/2021', '06/01/2021']
)

# 定位最后一个非空Total的位置和数值
last_valid_idx = df['Total'].last_valid_index()
last_valid_total = df.loc[last_valid_idx, 'Total']

# 筛选出需要填充的行,计算填充值
fill_mask = df.index > last_valid_idx
df.loc[fill_mask, 'Total'] = last_valid_total + (-df.loc[fill_mask, 'Change']).cumsum()

# 可选:将Total转为整数格式
df['Total'] = df['Total'].astype(int)

输出结果

执行后df的内容和你期望的结果完全一致:

Change  Total
01/01/2021     -12    100
02/01/2021     -54    154
03/01/2021     -23    177
04/01/2021      -2    179
05/01/2021     -54    233
06/01/2021     -72    305

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:15:02