如何将前有N个及以上连续相同值的Series元素改为前序值?
解决连续相同值阈值替换问题
给定Pandas Series:
import pandas as pd s = pd.Series([0,0,0,1,1,1,0])
当N=3时,需要将前序连续相同值数量≥N的新元素替换为前序值,最终得到:
0 0 1 0 2 0 3 0 4 1 5 1 6 1
基于你已经生成的组ID,后续步骤如下:
计算每个连续组的长度
用groupby结合transform('size'),得到每个元素所在连续组的长度:groups = (s != s.shift()).cumsum() group_lengths = groups.groupby(groups).transform('size')定位需要替换的位置
新组的第一个元素位置可以通过groups != groups.shift()识别,同时判断前一个组的长度是否≥N,生成替换掩码:mask = (groups != groups.shift()) & (group_lengths.shift() >= N)执行替换
使用mask将目标位置的元素替换为前序值(s.shift()):result = s.mask(mask, s.shift())
运行后即可得到期望的输出结果。
内容的提问来源于stack exchange,提问作者theodosis
相关产品推荐
相关产品推荐

