You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:45:01