2017-10-10 45 views
1

我有數據集的上限和下限,我想能夠拉出索引(最好在列表中)的任何項目落在此之外:使用限制來獲取索引名稱熊貓數據框python

X1 X2 X3 X4 X5 X6 X7 X8 X9 
1 1 7 6 0 7 3 0 0 8 
2 4 8 3 4 9 6 3 2 3 
3 3 7 5 5 7 5 1 1 4 
4 2 6 2 1 3 9 4 3 9 
5 10 2 2 6 4 7 4 9 7 

#Have another data frame with our limits 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 
1 1 7 3 4 7 3 0 0 3 
2 4 8 9 10 9 6 3 2 8 

所以我想要索引1,4,5,因爲在某些時候它們會超出我的極限。

我可以用這個:

llCheck = data < ll 
hlCheck = data > hl 

llCheck = 
X1 X2 X3 X4 X5 X6 X7 X8 X9 
False False False True False False False False False 
False False False False False False False False False 
False False False False False False False False False 
False True True True True True True True True 
True True True False True True True True False 

和獲取包含我認爲這是有幫助的每個細胞真/假值的兩個數據幀,但還沒有能夠得到進一步的和得到,如果任何項目索引在行=真。

有什麼建議嗎?

回答

1

我認爲你需要DataFrame.any過濾index值:

ll = 0 
hl = 2 

m = (df > ll) & (df < hl) 
L = df.index[m.any(axis=1)].tolist() 
print (L) 
[1, 3, 4] 

說明:

#get mask by limits with chaining both conditions 
m = (df > ll) & (df < hl) 
print (m) 
     X1  X2  X3  X4  X5  X6  X7  X8  X9 
1 True False False False False False False False False 
2 False False False False False False False False False 
3 False False False False False False True True False 
4 False False False True False False False False False 
5 False False False False False False False False False 

#check if at least one True per row 
print (m.any(axis=1)) 
1  True 
2 False 
3  True 
4  True 
5 False 
dtype: bool 

#is possible filter rows 
print (df[m.any(axis=1)]) 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 
1 1 7 6 0 7 3 0 0 8 
3 3 7 5 5 7 5 1 1 4 
4 2 6 2 1 3 9 4 3 9 
+0

釘它!謝謝!!!! – Dippy