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

如何在Pandas DataFrame中根据连续Z1 Z2序列生成配对newid新列

实现方法

核心逻辑

  • 首先识别配对的起始行:当前行place为Z1且下一行place为Z2
  • 给所有起始行分配顺序递增的标识值
  • 将标识值同步给起始行的下一行(对应配对的Z2行)
  • 其余未参与配对的行填充为空值

完整实现代码

import pandas as pd
import numpy as np

# 构造样例数据
df = pd.DataFrame({
    'sno': [1,2,3,4,5,6,7],
    'name': ['Bob','Jack','Rian','Vick','Jick','Rams','Venk'],
    'points': [10]*7,
    'place': ['Z1','Z2','Z1','Z1','Z1','Z1','Z2']
})

# 1. 标记配对起始行(Z1后面跟着Z2的行)
start_mask = df['place'].eq('Z1') & df['place'].shift(-1).eq('Z2')
# 2. 给起始行分配递增id,同时把id同步给下一行的Z2
df['newid'] = start_mask.cumsum().where(start_mask | start_mask.shift(), np.nan)

结果验证

运行后输出的df和预期结果完全一致:

sno  name  points place  newid
0    1   Bob      10    Z1    1.0
1    2  Jack      10    Z2    1.0
2    3  Rian      10    Z1    NaN
3    4  Vick      10    Z1    NaN
4    5  Jick      10    Z1    NaN
5    6  Rams      10    Z1    2.0
6    7  Venk      10    Z2    2.0

注意事项

你之前写的筛选条件存在两个问题:一是大小写不匹配(数据中是大写Z1/Z2,你写了小写z1),二是shift()默认取前一行,要取下一行需要传参数-1,且逻辑判断顺序搞反了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:57:04