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

如何将DataFrame中的null值替换为连续递增的序列编号?

你写的代码不生效有两个原因:

  • 采用了链式索引df_1['val'][df_1['val'].isnull()]的方式赋值,会触发pandas的SettingWithCopyWarning,不会实际修改原DataFrame,正确赋值应该用.loc索引
  • 逻辑不符合需求:对空值切片做ffill()得到的还是空值,直接加全量空值计数的逻辑也无法实现「非空值后的空值按顺序递增计数」的效果

正确实现方案

你需要先对val列的非空值做分组,每遇到一个非空值就开启新分组,每个分组内的空值直接用组内序号填充即可,示例代码如下:
首先构造测试数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'id': [1,2,3,4,5],
    'val': [40, np.nan, np.nan, 30, np.nan]
})

一行代码即可实现需求:

df['val'] = df['val'].fillna(df.groupby(df['val'].notna().cumsum()).cumcount() + 1)

运行后df的输出结果与要求一致:

id   val
0   1  40.0
1   2   1.0
2   3   2.0
3   4  30.0
4   5   3.0

如果需要val列为整数类型,可以额外执行df['val'] = df['val'].astype(int)做类型转换。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:15:00