2017-07-28 4 views
1

データフレームの頭と尾からpandas.Dataframeからk(言いますと、100)のエントリを取得するにはどうすればよいですか? 私は2つの別々のステップとマージ操作をお勧めしますが、それは退屈なようです。より良い方法がありますか? df.iloc[:100,:-100]を使用しようとしましたが、最初の100レコードしか返されません。pandasは頭と尾からk個のエントリを取る

あなたはconcanecateインデックスのため numpy.r_ilocを使用することができます

答えて

2

N = 3 
df = df.iloc[np.r_[0:N, -N:0]] 

サンプル

np.random.seed(45) 
df = pd.DataFrame(np.random.randint(10, size=(10,5))) 
print (df) 
    0 1 2 3 4 
0 3 0 5 3 4 
1 9 8 1 5 9 
2 6 8 7 8 5 
3 2 8 1 6 4 
4 8 4 6 4 9 
5 1 6 8 8 1 
6 6 0 4 9 8 
7 0 9 2 6 7 
8 0 0 2 9 2 
9 6 0 9 6 0 

N = 3 
df = df.iloc[np.r_[0:N, -N:0]] 
print (df) 
    0 1 2 3 4 
0 3 0 5 3 4 
1 9 8 1 5 9 
2 6 8 7 8 5 
7 0 9 2 6 7 
8 0 0 2 9 2 
9 6 0 9 6 0 
2

あなたはrange

N = 3 
df.iloc[range(0, N) + range(-N, 0)] 

Dでilocを使用することができます私が手

In [200]: df = pd.DataFrame(np.random.randn(10, 2)) 

In [201]: df 
Out[201]: 
      0   1 
0 -1.034025 0.222752 
1 0.102861 -0.827097 
2 1.218721 0.397002 
3 0.378780 1.903993 
4 0.931718 -1.086045 
5 1.608149 -0.233175 
6 -1.399926 -2.218517 
7 -0.411787 0.309623 
8 -0.493428 -1.834097 
9 -0.797647 -0.085315 

In [202]: N = 3 

In [203]: df.iloc[range(0, N) + range(-N, 0)] 
Out[203]: 
      0   1 
0 -1.034025 0.222752 
1 0.102861 -0.827097 
2 1.218721 0.397002 
7 -0.411787 0.309623 
8 -0.493428 -1.834097 
9 -0.797647 -0.085315 
+0

をetails - サポートされていないオペランドのタイプ(複数可)+について: '範囲' と '範囲' これはDF 'のようlist''の範囲を変換する必要がpythonの3のために、唯一の 'のpython 2'で動作 – Dark

+1

。 iloc [list(range(0、N))+ list(範囲(-N、0))] ' – jezrael

関連する問題