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

Pandas中DataFrame每次出现新值时如何删除对应分组前5行

Pandas 按连续值分组删除每组前N行实现

实现逻辑

需求核心是识别指定列的连续同值块(而非全局同值分组),每个块单独跳过前5行保留剩余数据,实现分三步:

  • 给每个连续同值块分配唯一ID:判断当前行和上一行指定列值是否不等,不等则分组ID累加
  • 对每个块内的行按顺序编号,编号从0开始
  • 筛选块内编号≥5的行,即为删除前5行后的结果,清理过程中生成的临时列即可

完整代码

import pandas as pd

# 测试数据
data = {
'col1': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 'C'],
'col2': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
}
df = pd.DataFrame(data)

# 标记连续同值块ID
df['block_id'] = df['col1'].ne(df['col1'].shift()).cumsum()
# 块内行顺序编号
df['row_idx'] = df.groupby('block_id').cumcount()
# 过滤前5行,删除临时列
res = df[df['row_idx'] >= 5].drop(columns=['block_id', 'row_idx']).reset_index(drop=True)
print(res)

运行结果

col1  col2
0    A     6
1    A     7
2    B    13
3    B    14
4    C    20
5    C    21

注意事项

  • 该逻辑严格按「连续出现的同值」分组,若同一值后续断开后再次出现,会被识别为新的独立块,单独执行删前5行的逻辑,完全匹配「每次出现新取值」的需求
  • 若某连续块总行数不足5行,该块所有数据会被过滤;如果需要调整删除行数,直接修改筛选条件里的数字阈值即可

内容的提问来源于stack exchange,提问作者ma59299

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:33:24