2016-09-08 13 views
6

データフレームをより多くのインデックス範囲(たとえば、10:12および25:28)でスライスする方法はありますか? 私はもっとエレガントな方法でこれをしたい:Python pandas複数のインデックス範囲でデータフレームをスライス

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

あなたはnumpyののr_ "スライストリック" を使用することができます。

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 
関連する問題