如何按重复序列切片DataFrame并提取每组序列的最后一个元素?
解决方案
首先构造示例DataFrame:
import pandas as pd df = pd.DataFrame({'a': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3]})
步骤1:标记连续重复值的分组
通过判断当前值与前一行是否不同,生成连续重复块的分组ID:
df['group_id'] = df['a'].ne(df['a'].shift()).cumsum()
步骤2:提取每个连续块的最后一个元素
按分组ID聚合,取每组的最后一行,再提取目标列的结果:
result = df.groupby('group_id').last()['a'].tolist()
执行后result的值为[1, 2, 3, 1, 2, 3],完全匹配你的需求。
为什么drop_duplicates不适用?
drop_duplicates(subset="a", keep="last")是全局去重,会把所有重复的1、2、3只保留最后一次出现的,所以你只会得到[1,2,3]。而我们需要的是按连续重复块去重,保留每个连续块的最后一个元素,所以必须先标记分组再聚合。
内容的提问来源于stack exchange,提问作者Celso Santos
相关产品推荐
相关产品推荐

