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

