2015-09-29 2 views
2

У меня есть большой фреймворк данных, и мне нужно создать новый dataframe только с данными, где один индекс является последовательным для другого. Для примера:Фильтрация последовательного индекса в pandas

import pandas as pd 
import numpy as np 
indexer = [0,1,3,5,6,8,10,12,13,17,18,20,22,24,25,26] 
df = pd.DataFrame(range(50,66), index=indexer, columns = ['A']) 

Таким образом, желаемый результат в этом случае:

 A 
0 50 
1 51 
5 53 
6 54 
12 57 
13 58 
17 59 
18 60 
24 63 
25 64 
26 65 

Есть ли быстрый способ сделать это в панд? или нужно сделать это с каким-то циклом и функцией над каждой строкой?

ответ

3

Вы не можете сдвинуть индекс, поэтому сначала его необходимо сбросить. Затем используйте операцию loc вместе с тестированием вверх и вниз на одну смену. Не забудьте вернуть индекс к оригиналу.

df.reset_index(inplace=True) 
>>> df.loc[(df['index'] == df['index'].shift(1) + 1) 
      | (df['index'] == df['index'].shift(-1) - 1), :].set_index('index') 
     A 
index  
0  50 
1  51 
5  53 
6  54 
12  57 
13  58 
17  59 
18  60 
24  63 
25  64 
26  65 
+0

отличный ответ. Благодаря! – Gabriel

Смежные вопросы