2017-10-10 47 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