假设我有以下数据:
my_class value
0 1 1
1 1 2
2 1 3
3 2 4
4 2 5
5 2 6
6 2 7
7 2 8
8 2 9
9 3 10
10 3 11
11 3 12
我想标识类更改的“class”的indizes,并移除此索引之后和之前的n行。 此示例(n=2)的输出应如下所示:
my_class value
0 1 1
5 2 6
6 2 7
11 3 12
我的做法:
# where class changes happen
s = df['my_class'].ne(df['my_class'].shift(-1).fillna(df['my_class']))
# mask with `bfill` and `ffill`
df[~(s.where(s).bfill(limit=1).ffill(limit=2).eq(1))]
输出:
my_class value
0 1 1
5 2 6
6 2 7
11 3 12
一个可能的解决办法是:
执行此操作的代码如下:
ind = df[df['class'].diff().fillna(0, downcast='infer') == 1].index
df[~df.index.isin([item for sublist in
[ range(i-2, i+2) for i in ind ] for item in sublist])]