如何找到首组重复行之后的第一行并生成新列?
首组重复行后第一行赋值解决方案
原始数据构造
import pandas as pd df = pd.DataFrame( { 'x': ['a', 'a', 'a','b', 'b','c', 'c', 'c',], 'y': list(range(8)) } )
预期输出
x y z 0 a 0 NaN 1 a 1 NaN 2 a 2 NaN 3 b 3 3 4 b 4 NaN 5 c 5 NaN 6 c 6 NaN 7 c 7 NaN
实现代码
# 初始化z列为空值 df['z'] = pd.NA # 获取首组的最后一行索引 first_group_value = df['x'].iloc[0] first_group_last_idx = df[df['x'] == first_group_value].index[-1] # 定位到首组结束后的第一行,赋值y值到z列 target_idx = first_group_last_idx + 1 df.loc[target_idx, 'z'] = df.loc[target_idx, 'y']
逻辑说明
- 先初始化
z列为统一空值,确保大部分行符合预期的NaN状态 - 通过
df['x'].iloc[0]拿到首组的取值(此处为'a'),筛选出该组所有行并取最后一行的索引 - 首组结束后的第一行索引为最后一行索引+1,用
loc精准定位该行,将对应y值赋值给z列
原尝试问题分析
你之前的代码m = (df.x.duplicated()); out = df[m],作用是筛选出所有重复出现的行(即x列中值重复的行,比如索引1、2、4、6、7),这和你要找的「首组结束后的第一行」逻辑完全不匹配,因此无法得到预期结果。
内容的提问来源于stack exchange,提问作者AmirX
相关产品推荐
相关产品推荐

