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

Pandas中仅对连续NaN的最后一个值用前后有效值均值填充

Pandas指定规则NaN填充实现方案

填充规则

  • 仅对连续NaN片段的最后一个值做填充,填充值为该位置前后相邻有效数值的均值
  • 若为单个孤立NaN:该值本身就是片段最后一个值,直接用前后有效值均值填充
  • 若为连续N个NaN(N≥2):仅填充片段内第N个(最后一个)NaN,其余N-1个NaN保留缺失状态

实现代码

import pandas as pd
import numpy as np

# 构造和示例输入一致的测试序列
s = pd.Series([1, np.nan, 3, np.nan, np.nan, 6, 7, np.nan, 9, np.nan, np.nan, np.nan, 13])

# 核心填充逻辑
# 1. 为连续NaN生成分组ID:同一段连续NaN会被分配相同的组号
na_group_id = s.notna().cumsum()
# 2. 标记所有连续NaN片段的最后一个元素位置
is_last_na_pos = s.isna() & (s.groupby(na_group_id).cumcount(ascending=False) == 0)
# 3. 计算每个位置对应的前后有效数值均值
fill_value = (s.ffill() + s.bfill()) / 2
# 4. 仅在标记位置执行填充,其余位置保留原值
result = s.mask(is_last_na_pos, fill_value)

效果验证

输入序列

输入序列示例

0      1.0
1      NaN
2      3.0
3      NaN
4      NaN
5      6.0
6      7.0
7      NaN
8      9.0
9      NaN
10     NaN
11     NaN
12    13.0
dtype: float64

输出结果

期望输出示例

0      1.0
1      2.0
2      3.0
3      NaN
4      4.5
5      6.0
6      7.0
7      8.0
8      9.0
9      NaN
10     NaN
11    11.0
12    13.0
dtype: float64

匹配校验

  • 索引1为孤立NaN:填充前后值1、3的均值2,符合规则
  • 索引3、4为连续2个NaN:仅最后一个位置(索引4)填充3、6的均值4.5,索引3保留NaN,符合规则
  • 索引7为孤立NaN:填充前后值7、9的均值8,符合规则
  • 索引9、10、11为连续3个NaN:仅最后一个位置(索引11)填充9、13的均值11,前两个位置保留NaN,和期望效果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:18:27