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
相关产品推荐
相关产品推荐

