如何在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
相关产品推荐
相关产品推荐

