2016-06-27 4 views
1

今、私はブール演算子で期待値を得ることができます:のpython-パンダにブールopearatorを通じて数のインデックスを取得します

mask1 = df.val > 10 
mask2 = df.val < 5 
c1 = df[mask1] 
c2 = df[mask2] 

そして私はc1c2に各ポイント間のスライスを取得したい、つまり、以下のようにデータフレームdf与えられた:

 val 
0  9 
1  12 
2  5 
3  2 
4  11 
5  9 
6  9 
7  3 

df[1:3]df[4:7]のスライスは、私が欲しいものです。まず、インデックス1347からmask1mask2を取得する必要があります。あなたはそれをする方法を知っていますか?

答えて

2

私はあなたが使用することができると思う:

c1 = df[mask1].index 
c2 = df[mask2].index 

print (c1) 
Int64Index([1, 4], dtype='int64') 
print (c2) 
Int64Index([3, 7], dtype='int64') 

print (df[c1[0]:c2[0]]) 
    val 
1 12 
2 5 

print (df[c1[1]:c2[1]]) 
    val 
4 11 
5 9 
6 9 

それは同じです:あなたはc1またはc2使用ixでスライスが必要な場合は

print (df[1:3]) 
    val 
1 12 
2 5 

print (df[4:7]) 
    val 
4 11 
5 9 
6 9 

:あなたの答えのための

print (df.ix[c1]) 
    val 
1 12 
4 11 

print (df.ix[c2]) 
    val 
3 2 
7 3 
+0

感謝!値 '12、11'を得るために' df [c1] 'のようなことを直接行うことができますか? – user5779223

+0

'ix'または' loc'を追加する必要があります。 'print(df.ix [c1])'戻り 'val 4 11' Btw、 'ix'は高速です。 – jezrael

+0

しかし、列はどうですか? 'df.ix [c1、 'val']'? – user5779223

0

これはあなたのために働くこととします

c1 = df[df['val'] > 10].index.tolist() 
c2 = df[df['val'] < 5].index.tolist() 

出力:C1 = [1,4] C2 = [3,7]

0

サブセットに大きなデータフレーム小さくそのマスク条件で1つを選択してください

df_mask1 = df[df.val > 10] 
#in df_mask1 you will have index 1 and 4 [Rows of main dataframe] 
#similarly 
df_mask2 = df[df.val < 5] 
# you will have index 3 and 7 in df_mask2 

またはそのマスク条件で他の列の値を変更したい場合は使用できますdf.loc(ウェブ上でのセッチングを試してみてください)。

関連する問題