2016-09-08 4 views
6

Что такое питоновский способ срезать блок данных по большему количеству диапазонов индексов (например, 10:12 и 25:28)? Я хочу это в более изящным способом:Python pandas slice dataframe по нескольким диапазонам индексов

df = pd.DataFrame({'a':range(10,100)}) 
df.iloc[[i for i in range(10,12)] + [i for i in range(25,28)]] 

Результат:

 a 
10 20 
11 21 
25 35 
26 36 
27 37 

Нечто подобное было бы более элегантно:

df.iloc[(10:12, 25:28)] 

Спасибо!

ответ

17

Вы можете использовать r_ "нарезки трюк" Numpy в:

df = pd.DataFrame({'a':range(10,100)}) 
df.iloc[pd.np.r_[10:12, 25:28]] 

Выдает:

 a 
10 20 
11 21 
25 35 
26 36 
27 37 
+0

Это не получается более кратким, чем это. 'np.r_' был создан именно для этой цели. И я кое-что узнал. Жаль, что я не мог +2. – piRSquared

+1

Следует отметить одно: чтобы получить отрицательную индексацию (т. Е. Эквивалент 'df.iloc [-2:]'), вы должны включить нуль: 'df.iloc [pd.np.r _ [: 2, -2: 0]] ' –

0

Вы можете воспользоваться панд ISIN функции.

df = pd.DataFrame({'a':range(10,100)}) 
ls = [i for i in range(10,12)] + [i for i in range(25,28)] 
df[df.index.isin(ls)] 


    a 
10 20 
11 21 
25 35 
26 36 
27 37 
Смежные вопросы