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

如何在Pandas中删除my_class列值变化点前后n行?

解决Pandas DataFrame中删除类别变化前后n行的问题

我来帮你搞定这个需求!要实现识别my_class列类别变化的位置,并删除这些位置前后n行的功能,我们可以通过以下步骤用Pandas完成,这里以n=2为例:

步骤1:准备数据并定位类别变化的索引

首先,我们先创建你提供的DataFrame,然后通过diff()方法找到类别发生变化的起始索引——当my_class列的当前值与前一行不同时,diff()会返回非零值,我们就能提取这些位置的索引。

import pandas as pd

# 创建你的DataFrame
data = {
    'my_class': [1,1,1,2,2,2,2,2,2,3,3,3],
    'value': [1,2,3,4,5,6,7,8,9,10,11,12]
}
df = pd.DataFrame(data)

# 找到类别变化的起始索引
change_indices = df[df['my_class'].diff() != 0].index.tolist()
# 此时change_indices的结果是 [3, 9],对应从1→2、2→3的变化起始点

步骤2:生成需要删除的索引集合

接下来,我们根据每个变化索引,计算出需要删除的前后n行索引。需要注意边界情况(比如索引不能小于0或超过DataFrame的最大索引):

n = 2
to_drop = set()

for idx in change_indices:
    # 添加变化点前n行的索引
    start = max(0, idx - n)
    to_drop.update(range(start, idx))
    # 添加变化点后n行的索引
    end = min(df.index[-1], idx + n - 1)
    to_drop.update(range(idx, end + 1))

步骤3:过滤DataFrame得到结果

最后,我们保留不在删除集合里的行,就得到了预期的输出:

result = df[~df.index.isin(to_drop)]
print(result)

运行后输出的结果完全符合你的预期:

my_class  value
0          1      1
5          2      6
6          2      7
11         3     12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:37:29