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

Pandas中基于前一行值条件递增填充NaN的实现方法

Pandas按分组递增填充ID列的NaN值

需求说明

需要为last unique id列的NaN值填充符合规则的ID:按Channel分组,同一分组内基于前一个有效ID,拆分出字母前缀和数字部分,数字依次加1后重新拼接成新ID。

输入数据

Channel last unique id
0   MYNTRA  MN000351370
1   NYKAA   NYK00038219
2   NYKAA   NaN
3   NYKAA   NaN
4   NYKAA   NaN
5   NYKAA   NaN
6   MYNTRA  NaN
7   MYNTRA  NaN
8   MYNTRA  NaN
9   MYNTRA  NaN
10  MYNTRA  NaN
11  MYNTRA  NaN

期望输出

Channel last unique id
0   MYNTRA  MN000351370
1   NYKAA   NYK00038219
2   NYKAA   NYK00038220
3   NYKAA   NYK00038221
4   NYKAA   NYK00038222
5   NYKAA   NYK00038223
6   MYNTRA  MN000351371
7   MYNTRA  MN000351372
8   MYNTRA  MN000351373
9   MYNTRA  MN000351374
10  MYNTRA  MN000351375
11  MYNTRA  MN000351376

解决方案

通过分组处理+正则拆分+序列生成实现,具体步骤如下:

  1. 导入依赖库
import pandas as pd
import re
  1. 定义分组处理函数
    对每个分组内的last unique id列做针对性处理:
  • 从第一个非NaN值提取字母前缀和数字格式长度
  • 生成从初始数字开始的连续递增序列
  • 拼接前缀与格式化数字,替换NaN值
def fill_id(group):
    # 获取分组内第一个有效ID
    first_id = group['last unique id'].dropna().iloc[0]
    # 拆分前缀和数字部分
    match = re.match(r'([A-Za-z]+)(\d+)', first_id)
    prefix = match.group(1)
    num_str = match.group(2)
    num_len = len(num_str)
    start_num = int(num_str)
    
    # 生成对应长度的连续数字序列
    nums = range(start_num, start_num + len(group))
    # 拼接成符合格式的新ID
    group['last unique id'] = [f"{prefix}{str(num).zfill(num_len)}" for num in nums]
    return group
  1. 按Channel分组并应用函数
# 构造输入DataFrame
df = pd.DataFrame({
    'Channel': ['MYNTRA', 'NYKAA', 'NYKAA', 'NYKAA', 'NYKAA', 'NYKAA', 'MYNTRA', 'MYNTRA', 'MYNTRA', 'MYNTRA', 'MYNTRA', 'MYNTRA'],
    'last unique id': ['MN000351370', 'NYK00038219', None, None, None, None, None, None, None, None, None, None]
})

# 分组执行填充逻辑
filled_df = df.groupby('Channel', group_keys=False).apply(fill_id)
print(filled_df)

代码说明

  • re.match(r'([A-Za-z]+)(\d+)', first_id):用正则拆分ID的字母前缀与数字部分,兼容不同长度的前缀和数字格式
  • str(num).zfill(num_len):保持数字部分的位数与原ID一致,不足位数用0补全
  • groupby('Channel', group_keys=False).apply(fill_id):按Channel分组,每个分组独立生成递增ID序列

运行代码后输出结果与期望完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:40:27