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

Python中如何将DataFrame非NA连续段的值统一填充为该段首个值

实现方法

可以直接通过pandas的内置方法实现,操作步骤如下:

前置处理

如果你的原始数据里的Na是字符串类型,需要先转换为pandas可识别的空值:

import pandas as pd
import numpy as np

df['colname'] = df['colname'].replace('Na', np.nan)

核心处理代码

# 标记非空值位置
mask = df['colname'].notna()
# 给每一段连续非空值分配唯一组号
group_labels = (mask & ~mask.shift(fill_value=False)).cumsum().where(mask)
# 按组替换为每组第一个非空值
df['colname'] = df.groupby(group_labels)['colname'].transform('first')

原理说明

  • 用notna()筛选出所有非空值的位置
  • 结合shift()偏移判断,找出每一段连续非空值的起始位置
  • 对起始位置做累加求和,给每一段连续非空值分配独立的组编号,空值位置不参与分组
  • 按组编号分组后,通过transform('first')将组内所有值统一替换为该组的第一个值

完整示例(包含测试数据)

import pandas as pd
import numpy as np

# 构造测试数据
df = pd.DataFrame({
    'colname': [np.nan, np.nan, np.nan, 1, 2, 3, 4, np.nan, np.nan, np.nan, np.nan, 2, 8, 5, 44, np.nan, np.nan]
})

# 处理逻辑
mask = df['colname'].notna()
group_labels = (mask & ~mask.shift(fill_value=False)).cumsum().where(mask)
df['colname'] = df.groupby(group_labels)['colname'].transform('first')

print(df)

运行后输出的结果和你要求的效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:42:02