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

如何基于Pandas DataFrame前序数字为缺失值分配连续编号?

解决Pandas DataFrame按规则填充空值的问题

嘿,我来帮你搞定这个空值填充的需求!咱们先把需求再明确下:

  • 如果空值(你用的None)出现在序列开头,就从99901开始依次递增编号
  • 如果空值前面的数字是90,就把这个空值设为91
  • 其他位置的空值(比如前面是别的数字),我默认按「前序数字+1」处理,如果不是你要的逻辑,可以随时调整~

第一步:先构造测试用的DataFrame

先模拟你的数据场景,包含开头的空值和90后面的空值:

import pandas as pd

# 构造示例数据,包含开头None、90后的None,以及其他数字后的None
df = pd.DataFrame({'col': [None, None, 90, None, 80, None]})

第二步:实现填充逻辑

这里用循环的方式,逻辑清晰易懂,适合新手理解:

# 初始化开头空值的起始编号
start_num = 99901

# 遍历每一行处理空值
for idx in range(len(df)):
    current_val = df.loc[idx, 'col']
    # 判断当前值是否为空(兼容Python的None和Pandas的NA)
    if pd.isna(current_val):
        # 处理开头的连续空值:第一行 或者 前一行也是空值
        if idx == 0 or pd.isna(df.loc[idx-1, 'col']):
            df.loc[idx, 'col'] = start_num
            start_num += 1
        else:
            prev_val = df.loc[idx-1, 'col']
            # 如果前序数字是90,填充91
            if prev_val == 90:
                df.loc[idx, 'col'] = 91
            # 其他情况默认前序数字+1,可根据你的需求修改
            else:
                df.loc[idx, 'col'] = prev_val + 1

第三步:查看处理结果

运行完上面的代码后,你的DataFrame会变成这样:

col
0  99901.0
1  99902.0
2     90.0
3     91.0
4     80.0
5     81.0

小提示

如果你的DataFrame里的空值是Python原生的None,建议先转成Pandas的pd.NA,这样pd.isna()能更准确识别:

df['col'] = df['col'].replace({None: pd.NA})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:29:32