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

Pandas如何基于环比增长率MoM_pct及前值填充value列NaN空值

解决方案

核心思路

将数据按value非空的位置分组,每组以第一个非空有效值为基准,通过组内环比增长率的累积乘积递推计算所有连续空值,天然支持任意长度的连续空值场景,无需提前预判空值连续长度。

前置条件

先确保数据已经按时间列升序排列,保证环比计算的时序正确性。

实现代码

# 按日期升序排序(若数据已排好序可跳过该行)
df = df.sort_values('date').reset_index(drop=True)

# 按非空value的位置拆分分组,每个非空值对应一个分组的起点
value_groups = df.groupby(df['value'].notna().cumsum())

# 组内递推计算填充后的值
df['value'] = value_groups.apply(
    lambda group: group['value'].iloc[0] * (1 + group['MoM_pct']).shift().cumprod().fillna(1)
).reset_index(level=0, drop=True)

逻辑说明

  • 分组键df['value'].notna().cumsum()的作用是:每遇到一个非空的value就生成一个新的分组ID,同一个分组内的结构为「1个已知有效值 + 后续所有连续空值」
  • 组内计算时,对1+MoM_pct做shift()是为了对齐逻辑:当期空值是乘以上一期的有效值,所以组内第一个元素的乘数为1(保持基准值不变),后续元素依次乘前序所有环比增长率的乘积
  • cumprod()会自动计算组内累积乘积,不管组内有多少个连续空值都能正确递推,不用重复写多轮fillna逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:24:04