2016-09-08 42 views
6

Jaki jest pythonic sposób, aby pokroić ramkę danych przez więcej zakresów indeksów (np. Przez 10:12 i 25:28)? chcę to w bardziej elegancki sposób:Python pandas plastry ramka danych przez wiele zakresów indeksu

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

Wynik:

 a 
10 20 
11 21 
25 35 
26 36 
27 37 

Coś takiego byłoby bardziej eleganckie:

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

dziękuję!

Odpowiedz

17

Można użyć NumPy za r_ "krojenia trick":

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

otrzymujemy:

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

Nie robi się bardziej zwięzły niż ten. 'np.r_' został zbudowany właśnie w tym celu. I nauczyłem się czegoś. Chciałbym móc +2. – piRSquared

+1

jedna rzecz do zapamiętania: aby uzyskać indeksowanie ujemne (tj. Odpowiednik 'df.iloc [-2:]'), musisz uwzględnić zero: 'df.iloc [pd.np.r _ [: 2, -2: 0]] ' –

0

Można skorzystać z pand ISIN funkcji.

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