如何在Pandas DataFrame中移除不符合0,1,2重复序列的行组
移除Pandas DataFrame中D列未按0、1、2顺序组成的行组
问题描述
现有如下DataFrame:
A B C D 0 1 2 3 0 1 4 5 6 1 2 7 8 9 2 3 10 10 10 0 4 10 10 10 1 5 1 2 3 0 6 4 5 6 1 7 7 8 8 2
需要移除所有D列未按0→1→2顺序完整组成的行组,最终得到:
A B C D 0 1 2 3 0 1 4 5 6 1 2 7 8 9 2 3 1 2 3 0 4 4 5 6 1 5 7 8 8 2
原因:第3、4行属于以D=0开头的组,但后续没有D=2的行,因此整个组需要被移除。
解决方案
核心思路是先按D=0的位置划分行组,再筛选出D列序列严格为[0,1,2]的组:
import pandas as pd # 构造原DataFrame df = pd.DataFrame({ 'A': [1,4,7,10,10,1,4,7], 'B': [2,5,8,10,10,2,5,8], 'C': [3,6,9,10,10,3,6,8], 'D': [0,1,2,0,1,0,1,2] }) # 1. 生成组ID:每遇到D=0就开启新组 df['group_id'] = (df['D'] == 0).cumsum() # 2. 检查每个组的D列序列是否符合要求 valid_groups = df.groupby('group_id')['D'].apply(lambda x: list(x) == [0,1,2]) # 3. 筛选有效组并清理辅助列 result_df = df[df['group_id'].isin(valid_groups[valid_groups].index)] result_df = result_df.drop('group_id', axis=1).reset_index(drop=True) print(result_df)
代码说明
(df['D'] == 0).cumsum():通过累加D=0的标记,给每个连续的行组分配唯一ID,确保每个组从D=0开始。groupby.apply:对每个组的D列序列进行校验,只保留完全匹配[0,1,2]的组。- 最后删除辅助的
group_id列并重置索引,得到和目标一致的结果。
内容的提问来源于stack exchange,提问作者AjWinston
相关产品推荐
相关产品推荐

